2011-04-27 140 views
9

iOS中@property的默認值是多少?iOS中@property的默認值是什麼?

例如,如果我聲明@property NSString *攝影師;

是默認值(分配)或(保留)還是還有什麼?

(原子,非原子)?

我無法從文檔中找到此信息。 謝謝

回答

15

我相信默認是(atomic, assign),但是,你不應該讓它們爲空。

默認值可能會在任何時候改變,而您正在編寫依賴於屬性定義的代碼。

例如,如果您依賴於默認的assign,並且在將來出於任何原因它將更改爲retain,那麼您的所有代碼都將泄漏。相反,如果默認值是retain,並且您依賴該值並且它更改爲assign,那麼當您不可避免地釋放對象時,代碼將崩潰。

不要依賴任何默認值,不管它們是什麼。

明確定義屬性的屬性。

+5

請注意:ARC的默認值已更改爲「strong」。見[這裏](http://stackoverflow.com/questions/9773604/property-definitions-with-arc-is-strong-default-now)。 – Ant 2012-07-11 10:10:44

+2

正是我在回答中所說的:默認值可能會改變。不要依賴他們。請明確點。 – Jasarien 2012-07-11 14:04:41

+0

不幸的是,蘋果頭*非常*經常使用默認值,因此知道它們是什麼仍然非常有用。請參閱CAShapeLayer.h以獲取最佳示例。 – SG1 2013-10-03 04:27:40

0

屬性是默認原子,使得合成的訪問者提供穩健訪問屬性在多線程環境,也就是說,通過設定器從吸氣退回或設定的值總是完全檢索或無論什麼其它線程的設置被執行同時。

如果指定strong,copy或retain並且不指定nonatomic,那麼在引用計數的環境中,對象屬性的合成get訪問器使用鎖並保留並自動釋放返回的值。

我不認爲蘋果會在未來改變它,但不幸的是最常見的是非原子的,所以你可能不得不把它寫下來。