我有一个NSMutableArray,我存储了两个对象但是在一段时间之后它们会被替换为数组中的nil。为什么会这样?数组对象仍在,并显示它包含两个对象,但它们都是零。
它们是否在数组中的意思是它们被引用并且不应该被删除?
奇怪的是,我放在数组中的对象没有被删除,因为它们被其他对象引用,它们只是被数组中的nil替换。
-(void)addRender:(id)theRender
{
if (renderArray == nil)
renderArray = [NSMutableArray array];
// Leaving this function and for a while afterwords, the object is in the array.
// By afterwords, I think is until the autorelease pool is drained, but I can't
// be sure but the objects are there as I am stepping though code.
[renderArray addObject:theRender];
}
-(void)render
{
// By the time this is called, renderArray has 2 nil objects in it.
if (renderArray)
[renderArray makeObjectsPerformSelector:@selector(render)];
}
从对象init函数调用-(void)addRender
函数。我不知道这是否重要,但那时候自我就定了。
对象本身没有被删除,只是在数组中用nil替换。什么条件导致ARC这样做?我已经读过关于归零的弱引用,它做了类似的事情,但我并没有声明任何弱引用,此外,对象仍然存在并引用了地方。
我花了最后两个小时打击我的头。
答案 0 :(得分:0)
renderArray是一个自动释放的对象,如果您只是将其定义为NSMutableArray *renderArray;
,则会在您有机会在render
方法中使用它之前将其释放。
尝试将其定义为__strong NSMutableArray *renderArray;
,这将告诉ARC为您保留它。