Iphone 在Xcode 4中定义成员和属性&;iOS 4
我正在开发一个相当雄心勃勃的第一个iPhone项目,我不知道该以何种方式实现和访问属性以及为什么 例1: (在.h中) (在.m中) 例2: (在.h中) (在.m中) 这两种方法对我来说似乎都很管用,但我正试图弄清楚为什么有两种方法可以做到这一点,以及这两种方法都有什么好处Iphone 在Xcode 4中定义成员和属性&;iOS 4,iphone,xcode,ios,ios4,Iphone,Xcode,Ios,Ios4,我正在开发一个相当雄心勃勃的第一个iPhone项目,我不知道该以何种方式实现和访问属性以及为什么 例1: (在.h中) (在.m中) 例2: (在.h中) (在.m中) 这两种方法对我来说似乎都很管用,但我正试图弄清楚为什么有两种方法可以做到这一点,以及这两种方法都有什么好处 有人能告诉我区别吗?示例1演示了定义ivar/属性变量对的旧方法。新编译器现在为您生成IVAR(NSstring*_sale;部分)。示例1还演示了使用@synthetic sale=\u sale手动将属性sale与iv
有人能告诉我区别吗?示例1演示了定义ivar/属性变量对的旧方法。新编译器现在为您生成IVAR(NSstring*_sale;部分)。示例1还演示了使用
@synthetic sale=\u sale手动将属性sale
与ivar\u sale
配对代码>语句
示例2是在Obj-C中实现属性的更简洁的方法,也是您在internet上看到大多数示例代码的方式。大多数情况下,您可以编写属性,而无需覆盖编译器为您生成的访问器/变异器方法
为了清晰起见,有些死硬的支持者使用下划线前缀来表示实例变量。您可能会发现,这对内存管理很有帮助,如示例1所示,将self.sale
设置为等于自动删除的NSString就可以了,因为它会被保留,但是将\u sale
设置为等于自动删除的对象将导致以后的行为不稳定,因为实例变量不会保留传入的NSString
一般来说,我更喜欢编写我的属性,如您在示例2中所示
简短回答:有两种方法可以做到这一点,因为新的编译器现在可以为您推断一些东西,但以前的方法已经保留下来,以便向后兼容。它们的工作方式相同。有些人在实例变量前面加下划线,作为区分成员变量和实例变量的视觉提示
关于这个问题的更多讨论:
有关更多可可风格指南,请查看。视情况而定。。如果您不想通过setter和getter访问ivar(并通过使用_名称显式显示),您可以按照示例1进行操作,但通常按照示例2进行操作。@sk先生:XCode 4直到2010年才发布,2009年才发布相关代码。非常感谢,特别是从内存管理的角度来看。我来自PHP、Java和C#;记忆管理是一门有趣而又陌生的科学
Nsstring *_sale;
@property (nonatomic, retain) NSString *sale;
@synthesize sale = _sale;
@property (nonatomic, retain) NSString *sale;
@synthesize sale;