我需要对以下代码进行一些说明。
我有一个包含 ClassA 对象的数组。然后我检索其中一个对象并将其分配给局部变量 object1。
ClassA object1 = [ClassAObjectContainer objectAtIndex:0];
(Q.1 - 这增加保留计数吗??我认为不是)
现在我删除对象
[ClassAObjectContainer removeObjectAtIndex:0];
( Q.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];
}
在这种情况下发生的另一件事,
- (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 个对象,不会发生内存泄漏。
谢谢你的时间。