0

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

Objective-C 会自动创建 _something 变量以及我的 getter/setter 还是我应该在我的接口/实现文件中定义该实例变量?

4

2 回答 2

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

于 2012-07-29T22:19:19.043 回答
-2

对不起,误读了你问题的一部分。如果你用下划线做@synthesize 部分,你就很好。无需显式定义 ivar。

于 2012-07-29T20:54:20.980 回答