2012-03-01 76 views
1

如果assign是一個setter,但屬性是readonly,那麼它將不會做任何設置,那麼爲什麼要使用assign爲什麼給一個屬性只讀和分配?

我從Apple docs on class extensions. In this page,我得到得到這個爲什麼你要一個公共只讀屬性,然後使它私下讀寫,但爲什麼不能省略公衆@interfaceassign,只是包括它僅在類擴展?

+0

可能重複:爲什麼都保留和只讀?](http://stackoverflow.com/questions/1933489/objective-c-2-0-properties-why-both-retain-and-readonly) – Caleb 2012-03-08 04:31:27

回答

2

如果要聲明@property多次(通常是因爲您在您的m聲明在頭文件中的公共readonly屬性,在一個匿名類別readwrite屬性),內存管理方案必須匹配。

所以,如果你有這樣的在您的m:

@property (assign, readwrite) NSObject *foo; 

然後,你需要這個在你的頭,和assign是必需的:

@property (assign, readonly) NSObject *foo; 
[Objective-C的2.0特性的
+0

另一個有用的情況是@protocol將屬性定義爲只讀,但是您的實現需要讀取:) – deanWombourne 2012-03-01 12:14:23

0

如果您只留下(nonatomic),編譯器會自動將第二個參數設置爲assign

+0

爲什麼編譯器會假設'assign'或任何其他setter當它被設置爲'readonly'? – johnbakers 2012-03-01 12:08:39

+0

其實我發現了另一個很好的答案:http://stackoverflow.com/questions/3894888/does-property-readonly-retain-have-a-meaning – johnbakers 2012-03-01 12:09:33

+0

你鏈接的頁面的例子提供了內部的getter和setter (僅限類)使用,而'readonly'參數適用於外部使用。我以前不明白你的問題。 – Alexander 2012-03-01 12:10:59

相關問題