亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

聲明的屬性是否需要相應的實例變量?

聲明的屬性是否需要相應的實例變量?

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 關注
  • 587 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號