iPhone分配和发布

Pla*_*lov 0 iphone release objective-c alloc ios

我是ObjC和iPhone的新手.

我下载了多个视图之间的数据共享示例.基本方法是在基础UIApplication中创建数据模型对象,并从/向其获取/设置数据.所以在init方法中我看到了以下代码:


- (id) init;
{
    self.theAppDataObject = [[ExampleAppDataObject alloc] init];
    [theAppDataObject release];
    return [super init];
}
Run Code Online (Sandbox Code Playgroud)

然后,使用委托我们可以访问此对象.


id theDelegate = (id) [UIApplication sharedApplication].delegate;
    ExampleAppDataObject* theDataObject;
    theDataObject = (ExampleAppDataObject*) theDelegate.theAppDataObject;

Run Code Online (Sandbox Code Playgroud)

所以,我的问题出在第一个代码示例中.为什么我们需要为theAppDataObject对象分配内存,然后立即释放对象?为什么我们以后在访问这个对象时会得到nil?

10倍

cab*_*ret 5

我假设theAppDataObject被宣布为@property (retain).因此,当通过执行self.theAppDataObject(或[self setTheAppDataObject:])设置对象时,此属性将保留ExampleAppDataObject.因此,您可以在以后发布它.

当您分配并初始化ExampleAppDataObject时,它的保留计数最多为1.当您将AppDataObject设置为此ExampleAppDataObject时,它会向其发送保留,因此保留计数最多为2.您可以释放自己对象的所有权; 它不会被释放,因为AppDataObject仍然拥有所有权.

如果这是有道理的.