可能重复发生的事情:
what happens if you add your just created object to a mutable array, and you release your object in objc如果您在刚刚创建对象添加到一个可变的数组,你释放你的对象
如果您刚刚创建的对象添加到会发生什么一个可变的数组,并且你释放你的对象
可能重复发生的事情:
what happens if you add your just created object to a mutable array, and you release your object in objc如果您在刚刚创建对象添加到一个可变的数组,你释放你的对象
如果您刚刚创建的对象添加到会发生什么一个可变的数组,并且你释放你的对象
假设它是你拥有的对象(例如它是用alloc
创建的,而不是一些方便的构造函数如stringWithFormat:
),该数组现在是该对象的唯一所有者。当数组被解除分配或从数组中移除对象时,它将被解除分配,除非另一个对象拥有它。
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好回答:直接和简单.... :) – Jhaliya 2011-04-15 07:35:47
如果你有这样的事情:
MyObject *obj = [[MyObject alloc] init];
[myArray addObject:obj];
[obj release];
你可以说myArray
成为obj
所有者。将一个对象添加到数组或字典时,它将被该数组或字典保留。由于您释放它(放弃所有权),数组或字典具有唯一的保留引用,因此成为所有者。在这个例子中,obj
一旦myArray
被取消分配(假设没有人从数组中查询并保留它),obj
被取消分配。
五小时前发生的同样的事情,当你问同样的问题。 – 2011-04-15 07:32:07
发表我的答案之前看到dup :-( – taskinoor 2011-04-15 07:34:22