声明的属性是否需要相应的实例变量?Objective-C 2.0中的属性是否需要声明相应的实例变量?例如,我习惯做这样的事情:MyObject.h@interface MyObject : NSObject {NSString *name;}@property (nonatomic, retain) NSString *name;@endMyObject.m@implementation@synthesize name;@end但是,如果我这样做了:MyObject.h@interface MyObject : NSObject {}@property (nonatomic, retain) NSString *name;@end这仍然有效吗?它与我之前的例子有什么不同吗?
3 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
如果您使用的是现代的Objective-C运行时(这是无论是iOS版3.x或更高,或64位雪豹或更高),那么你就不会需要在这样的情况下,以高德定义为您的属性。
当你@synthesize
的财产,伊娃实际上也将为你合成。这绕过了“脆弱的伊娃”情景。你可以在Cocoa with Love上阅读更多相关信息
烙印99
TA贡献1829条经验 获得超13个赞
如果您使用的是XCode 4.4或更高版本,它将为您生成实例变量合成代码。
你只需声明如下属性; 它将为您生成合成代码和实例变量声明代码。
@property (nonatomic, strong) NSString *name;
它会生成合成代码
@synthesize name = _name;
并且您可以使用_name访问实例变量,它类似于声明
NSString* _name
但如果你声明只读属性
@property (nonatomic, strong, readonly) NSString *name;
它会生成代码
@synthesize name;
要么
@synthesize name = name;
因此,您应该使用前缀“_”访问即时变量名称,无论您编写自己的合成代码,编译器都会为您生成代码。你可以写
@synthesize name = _name;
- 3 回答
- 0 关注
- 550 浏览
添加回答
举报
0/150
提交
取消