記憶體管理一直是oc的重點內容,而屬性的記憶體管理從我們開始編寫第一句ios**就伴隨著我們,其重要程度可見一斑。下面是oc記憶體管理修飾符的總結,只是寫出最常用的幾個屬性的記憶體管理修飾符,適用範圍arc。
簡單總結:基本資料型別用assign,物件用strong,**和ui控制項用weak,字串用copy:
1、assgin 適用於對基本資料型別(int,float等)的簡單賦值操作
2、strong 這個屬性特質表示一種擁有的關係,setter方法設定新值的時候會先保留屬性的新值,然後釋放舊值,最後將新值賦值給屬性
3、weak 表示一種非擁有的關係。setter方法設定新值的時候不會先保留屬性的新值,也不會釋放舊值,只是將新值賦值給屬性,與assign不同的是該記憶體管理特性會在屬性所指的物件銷毀時,將屬性置為nil,更加安全
4、unsafe_unretained 與assign型別類似。適用於」物件」型別的賦值,表達的是一種非擁有(unretained)的關係,當屬性所指的物件被銷毀時,屬性值不會自動被自動清空;
5、copy 如字面意思,該特質的setter方法不會保留新值,而是將其拷貝,當屬性型別為nsstring時候,可以用這個特質來確保屬性的值不會被其他物件修改。
因為傳遞給setter方法的新值有可能是乙個指向nsmutablestring型別的例項,若是不拷貝字串,那麼該字串有可能在物件不知情的情況下被其他物件修改,導致意外的結果。
簡述:
修飾符寫在@propert與型別之間的小括號裡
1、readonly只有get方法,沒有set方法
2、readwrite可讀可寫,預設\預設修飾符
3、atomic原子操作修飾符 執行緒安全 【多執行緒】預設修飾符
4、nonatomic非原子操作修飾符,執行緒不安全,oc中屬性多為執行緒不安全【執行緒鎖】
5、assign用於修飾基本資料(int,char)
6、可以對set\get方法進行重新命名(setter=method getter=method)
@property (readonly) nsstring * name;
@property (readwrite) nsstring * color;
@property (atomic) nsstring * number;
@property (nonatomic) nsstring * type;
@property (assign) int price;
//- (void)setfrom:(nsstring*)from -(nsstring*)from;
//乙個屬性可以新增多個修飾符,以逗號進行分割
@property (setter=myset:,getter=myget) nsstring * from;
//記憶體管理相關修飾符:retain\copy\strong\weak...
OC 屬性修飾符篇
一 mrc 與 arc 各自的屬性修飾符 1 屬性修飾符按 規範的順序2 是否原子操作 是否可讀寫 記憶體管理 3 property nonatomic,readwrite,copy nsstring str 4 ps 屬性修飾符順序並沒有硬性規定。二 記憶體管理修飾符 retain 引用計數加1。...
iOS 屬性修飾符
1.讀寫性修飾符 readwrite readonly readwrite 表明這個屬性是可讀可寫的,系統為我們建立這個屬性的setter和getter方法。readonly 表明這個屬性只能讀不能寫,系統只為我們建立乙個getter方法,不會建立setter方法 2.setter相關修飾符 ass...
iOS 基礎 屬性修飾符
建立乙個索引數為一的物件,然後釋放舊物件。簡單賦值,不更改索引計數。arc 下預設模式,釋放舊物件,引用新物件,並使新物件的計數器加一。使用絕大部分 nsobject 物件。引用新物件,該物件的計數器不加一。表示這個屬性是唯讀的,只生成getter方法,不會生成setter方法。可讀可寫 預設 設定...