@synthesize是什么东西= _something;自动创建变量_something?

时间:2012-07-29 20:33:47

标签: objective-c syntax ivar

我知道@synthesize会为实例变量自动创建getter和setter。当我指定= _something部分时,我理解这会通知编译器/运行时我希望它为getter / setter使用特定的后备变量。

Objective-C是否与我的getter / setter一起自动创建_something变量,还是应该在我的接口/实现文件中定义该实例变量?

2 个答案:

答案 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。