声明的属性是否需要相应的实例变量?

声明的属性是否需要相应的实例变量?

Objective-C 2.0中的属性是否需要声明相应的实例变量?例如,我习惯做这样的事情:

MyObject.h

@interface MyObject : NSObject {NSString *name;}@property (nonatomic, retain) NSString *name;@end

MyObject.m

@implementation@synthesize name;@end

但是,如果我这样做了:

MyObject.h

@interface MyObject : NSObject {}@property (nonatomic, retain) NSString *name;@end

这仍然有效吗?它与我之前的例子有什么不同吗?


catspeake
浏览 551回答 3
3回答

千巷猫影

如果您使用的是现代的Objective-C运行时(这是无论是iOS版3.x或更高,或64位雪豹或更高),那么你就不会需要在这样的情况下,以高德定义为您的属性。当你@synthesize的财产,伊娃实际上也将为你合成。这绕过了“脆弱的伊娃”情景。你可以在Cocoa with Love上阅读更多相关信息

烙印99

如果您使用的是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;
打开App,查看更多内容
随时随地看视频慕课网APP