可寫性
如果你給屬性加上了readonly的特性,編譯器就不會自動生成setter訪問器方法,屬性也就變成了只讀的。setter支持的特性
setter方法不僅僅是簡單的賦值,有這么幾個修飾詞是用來描述setter方法的:assign、retain、copy和weak,用不同的修飾詞表示生成的setter方法會有所不同,默認是assign,這意味著在setter方法中真的就是簡單的賦值。reatin表示賦值之后會調用新值的retain方法和舊值的release方法。copy表示先將值拷貝一份,然后將這個拷貝賦值給實例變量,這個修飾詞只適用于實現了NSCopying協議的類型。weak表示這個屬性的值將是一個弱引用,引用和被引用者之間沒有所屬關系。如果系統銷毀了某個屬性所引用的對象,屬性的值會自動地變為nil。一般情況下,如果父對象擁有子對象的引用,那么子對象就不應該再持有父對象的引用,而是應該使用弱引用的方式來引用父對象。原子化
nonatomic指定訪問器方法是非線程安全的,即多個線程可以同時訪問這個屬性。默認情況下,訪問器方法都是線程安全的,即使在多線程環境中也毫無風險。然而,即使要保證在多線程環境中能正常工作,訪問器也不一定必須是線程安全的。而將訪問器方法指定為非線程安全的,可以讓getter方法直接返回實例變量的值,效率更高,在iPhone應用中特別推薦使用。
使用alloc、retain、copy、release的原則
1.不應該釋放不屬于你控制的對象。
2.總是需要確保調用了一個對象的retain之后必須調用這個對象的release方法。
3.通過alloc或者copy創建出來的對象以及調用了ratain方法的對象都是由你控制的。通過構造器方法創建的對象不由你控制,比如通過stringWithString:這個方法創建的字符串對象。