我正在开发一个相当雄心勃勃的第一个iPhone项目,我很困惑,实现和访问属性的方式和原因.
例1:
(在.h)
Nsstring *_sale; @property (nonatomic,retain) NSString *sale;
(在他们中)
@synthesize sale = _sale;
例2:
(在.h)
@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中所示.
简答:有两种方法可以做到这一点,因为新的编译器现在可以为你推断出一些东西,但之前的做法是为了向后兼容.