iphone - 在 Xcode 4 和 iOS 4 中定义成员和属性

标签 iphone xcode ios ios4

我在开发一个雄心勃勃的第一个 iPhone 项目时已经走了很远,但我对实现和访问属性的方式以及原因感到困惑。

示例 1: (在.h中)

Nsstring *_sale;
@property (nonatomic, retain) NSString *sale;

(在.m中)

@synthesize sale = _sale;

示例 2: (在.h中)

@property (nonatomic, retain) NSString *sale;

(在.m中)

@synthesize sale;

这两种方法对我来说似乎都没有问题,但我想弄清楚为什么有两种方法可以做到这一点,以及这两种方法可能有什么好处。

有人能告诉我区别吗?

最佳答案

示例 1 演示了定义 ivar/property 变量对的旧方法。新的编译器现在为您生成 ivars(NSstring *_sale; 部分)。示例 1 还演示了使用 @synthesize sale = _sale; 语句手动将属性 sale 与 ivar _sale 配对。

示例 2 是在 Obj-C 中实现属性的更简洁的方式,也是您在 Internet 上看到的大多数示例代码的方式。绝大多数情况下,您可以编写属性而无需覆盖编译器为您生成的访问器/修改器方法。

为了清楚起见,有一些顽固的支持者使用下划线前缀来表示实例变量。您可能会发现这在内存管理方面对您有帮助,如示例 1 所示,将 self.sale 设置为等于自动释放的 NSString 会很好,因为它会被保留,但设置 _sale 等于一个自动释放的对象会在以后导致不稳定的行为,因为传入的 NSString 不会被实例变量保留。

一般来说,我更喜欢像示例 2 中所示那样编写我的属性。

简短回答:有两种方法可以做到这一点,因为新的编译器现在可以为您推断出一些东西,但是为了向后兼容,以前的方法已经被保留了下来。

关于iphone - 在 Xcode 4 和 iOS 4 中定义成员和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986516/

相关文章:

ios - 在导航栏左侧添加标题

ios 使用 NSURLSession 进行 FTP 上传

iphone - 重命名iPhone应用程序

ios - 在iOS中将多个图像上传为文件

iphone - 在 NSFetchedResultsController 跟踪更改时重置 NSPersistentStore 后崩溃

ios - NSNotificationCenter 从父类(super class)或子类调用方法?

ios - AFIncrementalStore 将核心数据与 REST API 同步

ios - 将 NSMutableArray 添加到项目并在另一个类中访问相同的 NSMutableArray

ios - Xcode swift : How to change button font size dynamically according to the size of the button?

xcode - 命令 ...swiftc 失败,退出代码为 1