目标C:如果@property似乎自动执行,我们为什么要在.h成员区域中声明ivars?

Cod*_*ven 15 properties declaration dynamic objective-c ivar

在实现接口时,似乎教程和文献中的常用方法是声明一个ivar,然后设置@propertythen @synthesize.

@interface MyClass : NSObject {
NSString *myString;
}

@property (nonatomic, retain) NSString *myString;
@end
Run Code Online (Sandbox Code Playgroud)

但是,省略显式声明并仅放置@property具有相同的效果.

@interface MyClass: NSObject {
}

@property (nonatomic, retain) NSString *myString;
@end
Run Code Online (Sandbox Code Playgroud)

那么大多数人如何使用@property和明确宣言?不好的形式不是吗?

Dav*_*ong 15

它曾经是必要的.Objective-C运行时有两个不同的版本:一个32位的"遗留"运行时(旧的)和一个32/64位的运行时(新的32位运行时仅用于iOS设备和iOS模拟器).

我认为这仍然是唯一需要的地方是当你以32位模式运行应用程序时(10.5或10.6).其他地方(64位Leopard,64位Snow Leopard,Lion,iOS)使用具有"自动ivar合成"的新运行时,所得到的ivars称为"合成ivars".

  • IIRC合成了ivars现在在模拟器中工作,如果我对WWDC视频的记忆正确地为我服务... (2认同)