我了解@synthesize为实例变量的getter和setters自动分区。当我指定= _something部分时,我理解这会通知编译器/运行时我希望它使用Getter / Setter的特定备份变量。

与我的getter / setter一起使用_something变量,或者我应该在我的界面/实现文件中定义该实例变量吗?

有帮助吗?

解决方案

问题是,在实现中的标题文件和@synthesize中的@property是否创建了底层的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位程序,或者您正在使用64位程序。您正在使用现代运行时,否则您正在使用传统运行时,并需要头文件中的额外行。由于已经发布了一些错误信息,这里是一个参考: Objective-C运行时编程指南

其他提示

抱歉,误读了你的一部分问题。如果你用下划线做@synthesize部分,你都很好。无需明确定义IVAR。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top