我知道@synthesize 会为实例变量自动创建 getter 和 setter。当我指定 = _something 部分时,我知道这会通知编译器/运行时我希望它为 getter/setter 使用特定的支持变量。
Objective-C 会自动创建 _something 变量以及我的 getter/setter 还是我应该在我的接口/实现文件中定义该实例变量?
我知道@synthesize 会为实例变量自动创建 getter 和 setter。当我指定 = _something 部分时,我知道这会通知编译器/运行时我希望它为 getter/setter 使用特定的支持变量。
Objective-C 会自动创建 _something 变量以及我的 getter/setter 还是我应该在我的接口/实现文件中定义该实例变量?
问题是头文件中的@property 和实现中的@synthesize 是否创建底层ivar,或者是否必须在头文件中列出ivar。例如,在头文件中:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
并在实施中:
@synthesize someString = _someString;
答案是这取决于您使用的是旧版运行时还是现代运行时。在 iOS 中,您始终使用现代运行时,因此您永远不需要这NSString *_somestring
条线,但这个问题是关于 Mac OS X 的。对于 Mac OS X,如果您在 Mac OS X 10.5 或更高版本上使用 64 位程序,则您使用的是现代运行时,否则您使用的是旧版运行时并且需要头文件中的额外行。由于发布了一些错误信息,这里有一个参考:Objective-C Runtime Programming Guide。
对不起,误读了你问题的一部分。如果你用下划线做@synthesize 部分,你就很好。无需显式定义 ivar。