• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 对属性和 ivars 感到困惑

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:12:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我意识到这里已经有很多关于属性与 ivar 的问题,但经过大量研究后,我似乎无法找到明确的答案。

我了解,当您声明如下属性时,编译器会自动为您合成支持 ivar 和两个访问器方法:

@property NSString *myString;

让我感到困惑的是,myString 是一个实际的实例变量吗?我问这个的原因是因为你永远不能像这样访问它:

NSLog(@"Value of myString is: %@", myString);

您要么必须使用支持 ivar _myString,要么使用一种 getter 方法,例如 [self myString]self.myString。所以我很困惑,因为通常你可以简单地使用变量名。

最重要的是,有人告诉我,您不应该将 myString 称为属性,并且属性一词只能用于引用两个访问器方法,它们是当您使用 @property 指令时,编译器会为您合成。

您说“我有一个名为 myString 的属性”真的是错误的吗?如果这是错误的,那么正确的说法是什么?

任何帮助解决这个问题将不胜感激。我整天都在努力巩固属性和 ivars 是不同事物的想法。



Best Answer-推荐答案


这里是您问题的答案-

is myString an actual instance variable? - No
Would it really be wrong for you to say "I have a property called myString" , and if that is wrong then what would be the correct way to say it? - No its not wrong to call it.

所以看起来真正让你感到困惑的是命名约定,如果你仔细阅读属性后面的命名约定 -

当您使用@property 语法来声明对象的属性时,如“封装数据”中所述,编译器会自动合成相关的getter 和setter 方法(除非您另有说明)。如果您出于任何原因需要提供自己的访问器方法实现,请务必确保为属性使用正确的方法名称,以便通过点语法调用您的方法,例如。

除非另有说明,否则 getter 方法应使用与属性相同的名称。对于名为 firstName 的属性,访问器方法也应称为 firstName。此规则的异常(exception)是 bool 属性,getter 方法应以 is 开头。例如,对于一个名为 paused 的属性,getter 方法应称为 isPaused。

属性的 setter 方法应使用 setPropertyName: 形式。对于名为 firstName 的属性,setter 方法应称为 setFirstName:;对于名为 paused 的 bool 属性,setter 方法应称为 setPaused:.

查看开发者网站了解详细说明 - https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html

关于ios - 对属性和 ivars 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378359/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap