使用NSMutableArray保留和自我

时间:2010-07-29 15:07:52

标签: objective-c nsmutablearray retain

在我的.h文件中,我有一个NSMutableArray * locationsArray使用如下属性定义

@property (nonatomic, retain) NSMutableArray *locationsArray

在我的.m文件中,我正在显示一个表视图,这个加载正常,直到我试图卷起,此时我崩溃了访问不良。这是因为locationsArray没有被保留。

这行代码解决了我在.m

中的问题
locationsArray = [[Locations loadLocations] retain] (#1)

这行代码也解决了同样的问题

self.locationsArray = Locations.loadLocations (#2)

我有几个问题需要澄清

  1. 这是设置此值的正确方法,我应该alloc initalloc initwithArray吗?
  2. 来自java世界,我理解self就是这个,或者至少我以为我做过......目标C的不同之处是locationsArray没有self不是在没有我添加保留的情况下保留。
  3. 显然我让它工作但是它花了一段时间而且仍然有点困惑为什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 是的,如果直接设置实例变量(locationsArray),则需要保留该值以保留它。你可以像你那样做,或直接分配/初始化它,这也意味着你保留了它的所有权。

  2. self确实等同于其他OO语言中的this。但是Obj-C在你的第一个例子中引用了一个“裸体”,而在第二个例子中引用它是self.locationsArray之间存在语义差异。前者表现出你的想象,但后者实际上是[self setLocationsArray: ... ]的句法快捷方式,它会自动为你保留,因为你已将该属性标记为retain

  3. 这最后一点非常微妙,(我认为)不是预期或明显的行为。如果您仍然模糊不清,请返回Apple文档。得到这个非常重要。