保留和自我在我的.h文件我有一个NSMutableArray的* locationsArray与属性定义如下与NSMutableArray的
@property (nonatomic, retain) NSMutableArray *locationsArray
在我的.m文件我是显示表视图,该装罚款,直到我试图在这一点上它会崩溃,并且访问不畅。这是由于locationsArray没有被保留。
这行代码固定我的问题在.M
locationsArray = [[Locations loadLocations] retain] (#1)
这行代码还固定了同样的问题
self.locationsArray = Locations.loadLocations (#2)
我有几个问题我需要澄清
- 这是设置这个值的正确方法,我应该做一个
alloc
init
,alloc initwithArray
? - 从java世界中发布我理解
self
是这样的,还是至少我认为我做过了......目标C中有什么不同,locationsArray
没有self
没有我保留没有被保留。
很明显,我得到它的工作,但它花了一段时间,仍然有点困惑,为什么。任何帮助,将不胜感激。
为了避免这个问题的风险,这就是为什么大量的例子用一个下划线字符和没有下划线的属性定义ivars? – jimsis 2010-08-04 13:42:03
这是人们这样做的一个原因,是的。范围标记的一般原因是这样的:(a)当你阅读代码时,你可以一眼就看到一个函数的内容是什么是局部变量和什么是伊娃,(b)为了方便,当一个方法(通常是一个setter)需要一个相同名称的参数,您不必编写愚蠢的'theString'或'anEvent'来避免在范围内隐藏伊娃。 为什么它不值得我在obj-C 2.0中不喜欢这个getter/setter点符号;我不会自己使用它,因为我觉得它比有用的更困惑。因人而异。 – 2010-08-04 14:44:02