我需要对以下代码进行一些说明。将对象分配给本地对象增加保留计数的目标C
我有一个包含ClassA对象的数组。然后我检索它的一个对象,并将其分配给本地变量object1。
ClassA object1 = [ClassAObjectContainer objectAtIndex:0];
(问题1 - 这是否增加保留计数?我认为这不是)
现在我删除对象
[ClassAObjectContainer removeObjectAtIndex:0];
(问2 - 所以现在object1点释放实例??如果我发送消息它会崩溃??
所以我应该使用ClassA object1 = [[ClassAObjectContainer objectAtIndex:0] retain];如果我想保持对象活着,并在以后使用它
另一种东西,其中之一是,当对象从方法
- (ClassA *)calle
{
ClassA *object1 = [[ClassA alloc] init];
return [object1 autorelease];
}
- (void)Caller
{
ClassA *object2 = [self calle];
//now suppose object1 is auto-released, so in this case object2 points to deallocated instance?
}
所以返回它不应该是更好 -
- (void)CallerMethod
{
ClassA *object2 = [[self calle] retain];
// Do other works.
/.....
[object2 release];
}
另一件事是什么在这种情况下happend更好的方法,
- (ClassA *)calle2
{
ClassA *object1 = [[ClassA alloc] init];
return [object1 autorelease];
}
- (void)CallerMethod
{
ClassA *object2 = [self calle];
object2 = [self calle2];
}
这里有没有内存泄漏,或者是ClassA * object2 = [self calle]弱/赋值,那里在第二次初始化object2 = [self calle2]后没有问题,我们可以这样分配100个对象,并且不会发生任何内存泄漏。
谢谢你的时间。
下面是答案Q1的答案:NO。对于简单分配,retainCount不会有任何更改。 – nkongara 2013-02-18 06:23:52