如果将刚刚创建的对象添加到可变数组中,并释放对象,会发生什么

时间:2011-04-15 07:26:53

标签: iphone objective-c

  

可能重复:
  what happens if you add your just created object to a mutable array, and you release your object in objc

如果将刚刚创建的对象添加到可变数组中,并释放对象

,会发生什么

3 个答案:

答案 0 :(得分:3)

NSArray或NSMutableArray保留对象。因此,您的对象将被保留,直到您从数组中删除对象或释放数组本身。

MyClass *obj = [[MyClass alloc] init];
[myMutableArray addObject:obj];  // obj is retained by array
[obj release];   // release to match the previous alloc

[myMutableArray removeObject:obj];   // obj receives a release message

[myMutableArray release];    // all objects in array receives release message if it is not owned anywhere else

答案 1 :(得分:0)

假设它是您拥有的对象(例如,它是使用alloc创建的,而不是像stringWithFormat:那样的一些便利构造函数),该数组现在是该对象的唯一所有者。当数组被释放或从数组中删除对象时,它将被释放,除非另一个对象获得了它的所有权。

答案 2 :(得分:0)

如果你有这样的事情:

MyObject *obj = [[MyObject alloc] init];
[myArray addObject:obj];
[obj release];

您可以说myArray成为obj的所有者。将对象添加到数组或字典时,该数组或字典会保留该对象。由于您释放它(放弃所有权),因此数组或字典具有唯一的保留引用,因此成为所有者。在此示例中,只要obj被释放,myArray就会被解除分配(假设没有其他人从数组中查询并保留它)。