2

我有一个 ivar,它是一个NSMutableArray. 我见过一些人使用这个函数来初始化一个数组:

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

   return varArray;
}

并且该数组在dealloc.

当我尝试这样做时,有时数组会被初始化,有时不会。

所以我要问的是,这是初始化 ivar 的好方法NSMutableArray,还是这样做更好:varArray = [[[NSMutableArray alloc]init]autorelease];而不是?

4

2 回答 2

1

这样做:

varArray = [[NSMutableArray alloc]init];

总是很好,但是在哪个功能中很重要。看来您正在变量的设置器中对其进行初始化,因此无论何时查询该实例变量,它都应该始终存在……理论上。但是,如果您只是解除分配 ivar 而不将其设置为 nil,则可能会出现问题,因此以下将显式重置 ivar 指针,以便在解除分配时保证它为 nil:

[varArray dealloc];
varArray = nil;

这将确保您的if (!varArray)支票是正确的。

于 2012-10-02T02:16:20.980 回答
0

所以我要问的是,这是初始化 ivar NSMutableArray 的好方法吗

不。

只需实现对象的指定初始化程序并在那里初始化数组:

- (id)init
{
  self = [super init];
  if (0 == self)
    return 0;
  varArray = [NSMutableArray new];
  return self;
}
于 2012-10-02T05:43:43.267 回答