正确的方式初始化NSMutableArray

问题描述:

我有一个伊娃,这是一个NSMutableArray。我见过一些人使用这个功能,以此来初始化数组:正确的方式初始化NSMutableArray

- (NSMutableArray *)varArray 
{ 
    if (!varArray) 
     varArray = [[NSMutableArray alloc]init]; 

    return varArray; 
} 

和数组在dealloc释放。

当我试图做到这一点时,有时数组被初始化,有时不会。

那么,我问的是,这是一个很好的方法来初始化伊娃NSMutableArray,或者是它更好地做到这一点:varArray = [[[NSMutableArray alloc]init]autorelease];呢?

+1

当你说“有时数组已初始化,有时不是”时,如何访问数组? – neilvillareal

+0

此外......你知道是否在对象的查询之间释放对象吗? – Stunner

做这一行:

varArray = [[NSMutableArray alloc]init];

始终是好的,但在其功能是真正重要的事情。看起来你正在初始化它在变量的setter中,所以无论你何时查询那个实例变量,它都应该始终存在......理论上。

[varArray dealloc]; 
varArray = nil; 

这将确保您的if (!varArray)检查将是:但是,如果你只是dealloc的伊娃,而不将其设置为nil所以下面将明确重置伊娃指针,以便dealloced当它被保证是零,可能会出现的问题正确。

+0

哦!所以这一定是数组有时未被初始化的原因。我会在接受你的回答之前先尝试。谢谢! –

那么,我问的是,这是一个很好的方法来初始化伊娃的NSMutableArray

简单地实现对象的指定初始化和初始化数组有:

- (id)init 
{ 
    self = [super init]; 
    if (0 == self) 
    return 0; 
    varArray = [NSMutableArray new]; 
    return self; 
} 
+0

嗨。你能解释为什么它不是初始化数组的好方法? –

+0

@AnnaFortuna当然。因为没有理由懒得这样做。如果这是一项昂贵的操作(例如耗尽磁盘或网络),那将是另一个考虑因素。然而,它只是一个空阵列。延迟初始化只会引入不必要的复杂性,这使得维护更加困难,并且是一个漏洞抽象。在init中创建它,并在dealloc中销毁它。完成。不变性是强大的/简单的 - 消除一类线程问题,消除潜在的内存管理问题。要么消除或简化制定者。消除运行时检查。等等...... – justin

+1

我明白了。感谢您的解释! –