所以我在处理方法中的数组时遇到了一个奇怪的问题,如果我通过
NSLog("Number of items:%@ , _array.count)
我会得到0,但打电话
NSLog("Number of items:%@, self.array.count)
我会得到正确的号码。数组应该在顶部声明,使用@property,在调用NSLog之前,我将在方法的前面将项存储到数组中。我一直都明白,“自我”和"_“是一样的,我错了吗,是否有我遗漏的小细节。
谢谢
编辑
代码行是
[_currentSelectedRoutes setObject:newMapRoute forKey:route.shortName]
并且将代码设置为延迟实例化。
发布于 2014-09-03 14:20:02
是的你错了。_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可能返回另一个(或修改过的)数组。
https://stackoverflow.com/questions/25645680
复制相似问题