我知道@synthesize会为实例变量自动创建getter和setter。当我指定= _something部分时,我理解这会通知编译器/运行时我希望它为getter / setter使用特定的后备变量。
Objective-C是否与我的getter / setter一起自动创建_something变量,还是应该在我的接口/实现文件中定义该实例变量?
答案 0 :(得分:1)
问题在于头文件中的@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。
答案 1 :(得分:-2)
抱歉,误读了部分问题。如果你用下划线做@synthesize部分,你就是好人。无需明确定义ivar。