正确的方式初始化NSMutableArray
我有一个伊娃,这是一个NSMutableArray
。我见过一些人使用这个功能,以此来初始化数组:正确的方式初始化NSMutableArray
- (NSMutableArray *)varArray
{
if (!varArray)
varArray = [[NSMutableArray alloc]init];
return varArray;
}
和数组在dealloc
释放。
当我试图做到这一点时,有时数组被初始化,有时不会。
那么,我问的是,这是一个很好的方法来初始化伊娃NSMutableArray
,或者是它更好地做到这一点:varArray = [[[NSMutableArray alloc]init]autorelease];
呢?
做这一行:
varArray = [[NSMutableArray alloc]init];
始终是好的,但在其功能是真正重要的事情。看起来你正在初始化它在变量的setter中,所以无论你何时查询那个实例变量,它都应该始终存在......理论上。
[varArray dealloc];
varArray = nil;
这将确保您的if (!varArray)
检查将是:但是,如果你只是dealloc的伊娃,而不将其设置为nil所以下面将明确重置伊娃指针,以便dealloced当它被保证是零,可能会出现的问题正确。
哦!所以这一定是数组有时未被初始化的原因。我会在接受你的回答之前先尝试。谢谢! –
那么,我问的是,这是一个很好的方法来初始化伊娃的NSMutableArray
号
简单地实现对象的指定初始化和初始化数组有:
- (id)init
{
self = [super init];
if (0 == self)
return 0;
varArray = [NSMutableArray new];
return self;
}
嗨。你能解释为什么它不是初始化数组的好方法? –
@AnnaFortuna当然。因为没有理由懒得这样做。如果这是一项昂贵的操作(例如耗尽磁盘或网络),那将是另一个考虑因素。然而,它只是一个空阵列。延迟初始化只会引入不必要的复杂性,这使得维护更加困难,并且是一个漏洞抽象。在init中创建它,并在dealloc中销毁它。完成。不变性是强大的/简单的 - 消除一类线程问题,消除潜在的内存管理问题。要么消除或简化制定者。消除运行时检查。等等...... – justin
我明白了。感谢您的解释! –
当你说“有时数组已初始化,有时不是”时,如何访问数组? – neilvillareal
此外......你知道是否在对象的查询之间释放对象吗? – Stunner