我有一个NSMutableArray
的ivar。我见过有些人使用这个函数作为初始化数组的方法:
- (NSMutableArray *)varArray
{
if (!varArray)
varArray = [[NSMutableArray alloc]init];
return varArray;
}
阵列在dealloc
中发布。
当我尝试这样做时,有时会初始化数组,有时不会。
所以我要问的是,这是初始化ivar NSMutableArray
的好方法,还是最好这样做:varArray = [[[NSMutableArray alloc]init]autorelease];
代替?
答案 0 :(得分:1)
这一行:
varArray = [[NSMutableArray alloc]init];
总是很好,但功能在哪里才重要。看来你是在变量的setter中初始化它,所以每当你查询那个实例变量时,它应该总是存在......理论上。但是如果您只是将ivar设置为nil而不将其设置为nil,则可能会出现问题,因此以下内容将显式重置ivar指针,以便在解除分配时保证为nil:
[varArray dealloc];
varArray = nil;
这将确保您的if (!varArray)
检查正确无误。
答案 1 :(得分:0)
所以我要问的是,这是初始化ivar NSMutableArray的好方法
否强>
只需实现对象的指定初始值设定项并在那里初始化数组:
- (id)init
{
self = [super init];
if (0 == self)
return 0;
varArray = [NSMutableArray new];
return self;
}