2010-07-27 124 views
0

我不太確定我是否正確理解原子。從我讀的內容來看,它說原子是iPhone的默認設置。現在是僅用於屬性或任何實例變量。例如,如果我有一個實例變量,我將編寫自己的setter/getters,並且不將它聲明爲屬性,那麼是否會使該實例變量爲原子?其缺點主要在於它針對線程進行了優化,而我的實例變量/應用程序可能甚至不需要?謝謝。實例變量,默認爲原子

回答

0

屬性聲明中的atomic關鍵字具有雙重責任 - 既是文檔又是合成訪問器的指令。關鍵字只適用於訪問器方法 - 手動訪問ivars基本上與訪問C結構相同,並且從來不是原子的。

如果您使用屬性聲明語法,您仍然可以編寫自己的訪問器,但如果這樣做,則應遵守聲明(如果不聲明nonatomic,則應手動實現原子性)。如果您的房產是@synthesize,他們將自動遵循您的聲明。

原子屬性的缺點是它們使用鎖定,這非常昂貴 - 如果該屬性不會被多個線程訪問,則應該始終聲明它爲nonatomic(至少在iPhone上)。

+0

怎麼樣聲明浮動屬性?我認爲任何32位結構在iPhone上默認是原子的 – Pochi 2012-06-18 05:42:52