1.readwrite/readonly??
readwrite:讀寫,系統(tǒng)會自動創(chuàng)建setter和getter方法。
readonly:只讀,系統(tǒng)只會創(chuàng)建getter方法,不會創(chuàng)建setter方法。
2.retain/assign ?strong/weak
Xcode4.2(iOS4.3及以下版本)和以下版本使用retain和assign,Xcode4.3(iOS5和以上版本)和之后的版本使用strong和weak,strong類似retain,weak類似assign。
3.原子性修飾符:atomic/nonatomic
atomic:提供多線程安全,在多線程的環(huán)境下,原子操作是必要的,否則可能引起錯誤的結(jié)果,防止寫未完成,被另一個線程讀取,造成數(shù)據(jù)錯誤,但是特別耗費系統(tǒng)資源。使用atomic,則setter方法變成:
{lock}
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}
nonatomic:禁止多線程,變量保護,提高性能。
4.getter和setter相關(guān)修飾符,assign/retain/copy
assign:用于基本類型(NSInteger和CGFloat)和C數(shù)據(jù)類型(char,int,float,double等),還有id類型。assign這個修飾符不會牽扯到內(nèi)存管理,如果是對象類型,使用該修飾符,就會導致內(nèi)存泄漏或者報EXE_BAD_ACCESS錯誤。
retain:用于對象類型,如果用于基本類型會報錯,在使用retain的時候,setter方法會先將舊的對象release掉,然后在對新的對象賦值并進行一次retain操作。
copy:主要用在NSString類型,表示復制內(nèi)容。block用copy。
系統(tǒng)默認是assign,retain是指針的復制,copy是內(nèi)容的復制。