所以我在使用方法内的数组时遇到了一个奇怪的问题,如果我去打印数组的内容
NSLog("Number of items:%@ , _array.count)
我会得0而是打电话
NSLog("Number of items:%@, self.array.count)
我会得到正确的号码。使用@property将数组声明在顶部,在调用NSLog之前,我会先在方法中将项目存储到数组中。我一直都明白," self"与" _"相同,我错了,是否有我遗漏的细节。
由于
编辑----------------------
代码行是
[_currentSelectedRoutes setObject:newMapRoute forKey:route.shortName]
并且代码设置为延迟实例化
答案 0 :(得分:2)
是的,你错了。 _var
与self.var
宣布像
这样的属性时@property NSString *lastname;
编译器将创建一个名为_lastname
的实例变量。
然后编译器创建两个方法:
- (NSString *) lastname;
- (void) setLastname:(NSString *) lastname;
默认情况下,这些方法不会设置和返回_lastname
。他们在那里,其他类中的方法可以访问内容。
如果另一个类想要访问lastname
的值,则可以这样做:
person.lastname
编译器编译如下:
[person lastname]
你知道吗?这就是这种方法的原因以及引入属性的原因。如果你这样做:
self.lastname
这也将调用getter方法。但是
_lastname
将直接访问实例变量。这也是您可以使用底层ivar设置和只读属性的原因。
始终可以是自定义g / setter。例如,在你的情况下,getter可能会返回另一个(或修改过的)数组。