首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >_item和self.item的差异

_item和self.item的差异
EN

Stack Overflow用户
提问于 2014-09-03 13:29:06
回答 1查看 769关注 0票数 0

所以我在处理方法中的数组时遇到了一个奇怪的问题,如果我通过

代码语言:javascript
运行
复制
NSLog("Number of items:%@ , _array.count)

我会得到0,但打电话

代码语言:javascript
运行
复制
NSLog("Number of items:%@, self.array.count)

我会得到正确的号码。数组应该在顶部声明,使用@property,在调用NSLog之前,我将在方法的前面将项存储到数组中。我一直都明白,“自我”和"_“是一样的,我错了吗,是否有我遗漏的小细节。

谢谢

编辑

代码行是

代码语言:javascript
运行
复制
[_currentSelectedRoutes setObject:newMapRoute forKey:route.shortName]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 14:20:02

是的你错了。_varself.var不一样

当您声明以下属性时

代码语言:javascript
运行
复制
@property NSString *lastname;

编译器将创建一个名为_lastname的实例变量。

然后编译器创建两个方法:

代码语言:javascript
运行
复制
- (NSString *) lastname;
- (void) setLastname:(NSString *) lastname;

默认情况下,这些方法只做设置和返回_lastname。在那里,其他类中的方法可以访问内容。

如果另一个类希望访问lastname的值,则执行如下操作:

代码语言:javascript
运行
复制
person.lastname

编译器像这样编译:

代码语言:javascript
运行
复制
[person lastname]

你看?这就是这种方法的原因,也是引入属性的原因。如果你这样做了:

代码语言:javascript
运行
复制
self.lastname

这也将调用getter方法。但

代码语言:javascript
运行
复制
_lastname

将直接访问实例变量。这也是您可以通过使用基础ivar设置和只读属性的原因。

总有可能有一个定制的g/setter。例如,在您的示例中,getter可能返回另一个(或修改过的)数组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25645680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档