如果assign
是一個setter,但屬性是readonly
,那麼它將不會做任何設置,那麼爲什麼要使用assign
?爲什麼給一個屬性只讀和分配?
我從Apple docs on class extensions. In this page,我得到得到這個爲什麼你要一個公共只讀屬性,然後使它私下讀寫,但爲什麼不能省略公衆@interface
的assign
,只是包括它僅在類擴展?
如果assign
是一個setter,但屬性是readonly
,那麼它將不會做任何設置,那麼爲什麼要使用assign
?爲什麼給一個屬性只讀和分配?
我從Apple docs on class extensions. In this page,我得到得到這個爲什麼你要一個公共只讀屬性,然後使它私下讀寫,但爲什麼不能省略公衆@interface
的assign
,只是包括它僅在類擴展?
如果要聲明@property
多次(通常是因爲您在您的m聲明在頭文件中的公共readonly
屬性,在一個匿名類別readwrite
屬性),內存管理方案必須匹配。
所以,如果你有這樣的在您的m:
@property (assign, readwrite) NSObject *foo;
然後,你需要這個在你的頭,和assign
是必需的:
@property (assign, readonly) NSObject *foo;
[Objective-C的2.0特性的
另一個有用的情況是@protocol將屬性定義爲只讀,但是您的實現需要讀取:) – deanWombourne 2012-03-01 12:14:23
如果您只留下(nonatomic)
,編譯器會自動將第二個參數設置爲assign
。
爲什麼編譯器會假設'assign'或任何其他setter當它被設置爲'readonly'? – johnbakers 2012-03-01 12:08:39
其實我發現了另一個很好的答案:http://stackoverflow.com/questions/3894888/does-property-readonly-retain-have-a-meaning – johnbakers 2012-03-01 12:09:33
你鏈接的頁面的例子提供了內部的getter和setter (僅限類)使用,而'readonly'參數適用於外部使用。我以前不明白你的問題。 – Alexander 2012-03-01 12:10:59
可能重複:爲什麼都保留和只讀?](http://stackoverflow.com/questions/1933489/objective-c-2-0-properties-why-both-retain-and-readonly) – Caleb 2012-03-08 04:31:27