我正在尝试使用以下代码将对象添加到NSMutableArray:
Item *newItem = [[Item alloc] init];
[self.theArray addObject:newItem];
如果我没记错的话,回到旧的保留/发布日,我不必担心newItem
变量超出范围,因为该对象在收到时会收到retain
添加到数组中,因此不会被释放。
但我现在正在使用ARC,对象消失了。数组本身很好,它包含的其他对象不受影响。所以我怀疑我的newItem
由于某种原因被自动解除分配。
有人可以告诉我这里发生了什么,以及我如何解决它?
答案 0 :(得分:1)
Item *newItem = [[Item alloc] init];
// This line is the same as this
//
// __strong Item *newItem = [[Item alloc] init];
//
// the newItem variable has strong reference of the Item object.
// So the reference count of the Item object is 1.
[self.theArray addObject:newItem];
// Now theArray has strong reference of the Item object.
// So the reference count of the Item object is 2.
Item对象的引用计数为2,因此不会释放Item对象。如果您的代码具有如下范围,
{
Item *newItem = [[Item alloc] init];
[self.theArray addObject:newItem];
}
它不会影响Item对象。
{
Item *newItem = [[Item alloc] init];
[self.theArray addObject:newItem];
// the reference count of the Item object is 2 as I said.
}
// The scope of the newItem variable was ended.
// So the lifetime of the newItem variable was ended,
// then the strong reference by the newItem was gone.
// Thus the reference count of the Item object was reduced from 2 to 1.
Item对象的引用计数为1,因此也不会释放Item对象。
答案 1 :(得分:0)
我终于发现了什么是错的。它与分配无关。发生了什么事情是在重新加载表视图时再次调用awakeFromNib方法。当然,重置各种东西,使东西消失。