为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2019-08-01 15:55:06
声明的属性是否需要相应的实例变量?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上阅读更多相关信息


查看完整回答
反对 回复 2019-08-01
?
烙印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;


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 550 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信