簡述OC中內存管理機制

簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與alloc配對使用的方法是dealloc還是release,為什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak屬性的作用?并區(qū)別strong(強引用)、 weak(弱引用)?什么情況使用copy,assign,和retain?
管理機制:使用了一種叫做引用計數(shù)的機制來管理內存中的對象。OC中每個對象都對應著他們自己的引用計數(shù),引用計數(shù)可以理解為一個整數(shù)計數(shù)器,當使用alloc方法創(chuàng)建對象的時候,持有計數(shù)會自動設置為1。當你向一個對象發(fā)送retain消息 時,持有計數(shù)數(shù)值會增加1。相反,當你像一個對象發(fā)送release消息時,持有計數(shù)數(shù)值會減小1。當對象的持有計數(shù)變?yōu)?的時候,對象會釋放自己所占用的內存。
retain(引用計數(shù)加1)->release(引用計數(shù)減1)
alloc(申請內存空間)->dealloc(釋放內存空間)
readwrite: 表示既有getter,也有setter (默認)
readonly: 表示只有getter,沒有setter
nonatomic:不考慮線程安全
atomic:線程操作安全 (默認)
線程安全情況下的setter和getter:

  • (NSString) value {
    @synchronized(self) {
    return [[_value retain] autorelease];
    }}
    (void) setValue:(NSString
    )aValue {
    @synchronized(self) {
    [aValue retain];
    [_value release];
    _value = aValue;
    } }
    retain: release舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數(shù)為1
    assign: 簡單賦值,不更改索引計數(shù) (默認)
    copy: 其實是建立了一個相同的對象,地址不同(retain:指針拷貝 copy:內容拷貝)
    strong:(ARC下的)和(MRC)retain一樣 (默認)
    weak:(ARC下的)和(MRC)assign一樣, weak當指向的內存釋放掉后自動nil化,防止野指針
    unsafe_unretained 聲明一個弱應用,但是不會自動nil化,也就是說,如果所指向的內存區(qū)域被釋放了,這個指針就是一個野指針了。autoreleasing 用來修飾一個函數(shù)的參數(shù),這個參數(shù)會在函數(shù)返回的時候被自動釋放。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容