iphone – 在Xcode 4和iOS 4中定义成员和属性
发布时间:2020-12-14 17:48:38 所属栏目:百科 来源:网络整理
导读:我正在开发一个相当雄心勃勃的第一个iPhone项目,我很困惑,实现和访问属性的方式和原因. 例1: (在.h) Nsstring *_sale;@property (nonatomic,retain) NSString *sale; (在他们中) @synthesize sale = _sale; 例2: (在.h) @property (nonatomic,retain) NSSt
我正在开发一个相当雄心勃勃的第一个iPhone项目,我很困惑,实现和访问属性的方式和原因.
例1: Nsstring *_sale; @property (nonatomic,retain) NSString *sale; (在他们中) @synthesize sale = _sale; 例2: @property (nonatomic,retain) NSString *sale; (在他们中) @synthesize sale; 这两个似乎对我没有任何麻烦,但我想弄清楚为什么有两种方法可以做到这一点,以及可能有什么好处. 有人可以告诉我区别吗? 解决方法
示例1演示了定义ivar / property变量对的旧方法.新编译器现在为您生成ivars(NSstring * _sale;部分).示例1还演示了使用@synthesize sale = _sale手动将属性销售配对到ivar _sale;声明.
示例2是一种在Obj-C中实现属性的更简洁的方法,也是您在互联网上看到大多数示例代码的方式.绝大多数情况下,您可以编写属性而无需覆盖编译器为您生成的访问器/更改器方法. 为清晰起见,有一些下划线前缀的顽固支持者表示实例变量.您可能会发现这对内存管理有所帮助,如示例1所示,设置self.sale等于自动释放的NSString会很好,因为它会被保留,但设置_sale等于自动释放的对象会导致不稳定的行为之后因为传入的NSString不会被实例变量保留. 一般来说,我更喜欢编写我的属性,如例2中所示. 简答:有两种方法可以做到这一点,因为新的编译器现在可以为你推断出一些东西,但之前的做法是为了向后兼容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |