我对 Objective-C 中的属性和实例变量感到很困惑。
我已经完成了 Aaron Hillegass 的“Mac OS X 的 Cocoa 编程”的一半,一切都是合乎逻辑的。你会声明一个像这样的类:
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
由于其他对象需要操作我们的
name
和items
实例变量,我们使用@property
/@synthesize
为它们生成访问器/修改器。在我们的类中,我们不使用访问器/修改器——我们只是直接与实例变量交互。something
只是我们将在我们的类中使用的一个实例变量,由于没有其他人需要使用它,我们不会为它创建一对访问器和修改器。我们需要与 UI 中的文本字段进行交互,因此我们
IBOutlet
为它声明一个,连接它,我们就完成了。
一切都非常合乎逻辑。
然而,在 iPhone 世界中,情况似乎有所不同。人们为每个实例变量声明属性,为 声明属性IBOutlets
,并使用访问器/修改器与类中的实例变量进行交互(例如,他们会编写[self setName:@"Test"]
而不是name = @"Test"
)。
为什么?到底是怎么回事?这些差异是 iPhone 特有的吗?为所有实例变量声明属性、为 声明属性IBOutlets
以及在您自己的类中使用访问器/修改器有什么好处?