_item和self.item的区别

时间:2014-09-03 13:29:06

标签: objective-c xcode

所以我在使用方法内的数组时遇到了一个奇怪的问题,如果我去打印数组的内容

NSLog("Number of items:%@ , _array.count)

我会得0而是打电话

NSLog("Number of items:%@, self.array.count)

我会得到正确的号码。使用@property将数组声明在顶部,在调用NSLog之前,我会先在方法中将项目存储到数组中。我一直都明白," self"与" _"相同,我错了,是否有我遗漏的细节。

由于

编辑----------------------

代码行是

[_currentSelectedRoutes setObject:newMapRoute forKey:route.shortName]

并且代码设置为延迟实例化

1 个答案:

答案 0 :(得分:2)

是的,你错了。 _varself.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可能会返回另一个(或修改过的)数组。