什么是ARC?
ARC即Automatic Reference Counting,它是現(xiàn)有的Objective-C的內(nèi)存管理機制蒸健。該機制下,代碼中會自動添加retain/release蛋济,原本需要手動處理引用計數(shù)的代碼交由編譯器自動完成旨袒。
什么是MRC察绷?
MRC即Manual Reference Counting干签,手動通過retain為對象獲取內(nèi)存,并用release釋放內(nèi)存拆撼。
ARC與Garbage Collection的區(qū)別筒严?
Garbage Collection在運行時管理內(nèi)存丹泉,可以解決retain cycle,而ARC在編譯時管理內(nèi)存鸭蛙。
循環(huán)引用摹恨?
循環(huán)引用是指兩個或兩個以上對象相互之間互相強引用,導致所有對象無法被釋放的現(xiàn)象娶视。是內(nèi)存泄漏的一種情況晒哄。實際使用中,最為常見的是block的應用肪获。
關鍵詞寝凌,引用類型?
strong:表示指向并擁有該對象孝赫。其修飾的對象的引用計數(shù)會+1.該對象只要引用計數(shù)不為0较木,就不會被銷毀∏啾可以通過強行設為nil進行銷毀伐债。
weak:表示指向但不擁有該對象。其修飾的對象引用計數(shù)不會增加致开,會自行在內(nèi)存中被銷毀峰锁。使用較多的是定義一個代理。
assign:主要用于修飾基本數(shù)據(jù)類型双戳,如int虹蒋、float,這些值主要存在于棧中飒货。
copy:與strong類似魄衅。不同的是strong的復制是多個指針指向同一個地址,而copy的復制會在內(nèi)存中復制一份對象塘辅,指針是指向不同的地址晃虫。copy一般用在修飾有對應可變類型的不可變對象上,類似NSString
weak一般用于修飾對象莫辨,assign一般用來修飾基礎數(shù)據(jù)類型。原因就是assign修飾的對象被釋放后毅访,指針的地址依然存在沮榜,造成“野指針”,在堆上容易造成奔潰喻粹。而棧上的內(nèi)存系統(tǒng)會自動釋放蟆融,不會造成“野指針”。
在Objective-C中守呜,基本數(shù)據(jù)類型默認的關鍵字是atomic型酥,readwrite和assign山憨;普通屬性的默認關鍵字是atomic,readwrite和strong弥喉。
atomatic和nonatomic的比較郁竟?
atomatic修飾的對象能保證setter和getter的完整性,任何線程訪問它都可以得到一個完整的初始化的對象由境。但因為要保證操作的完成棚亩,所以速度較慢。比nonatomic安全虏杰,但也不是絕對的線程安全讥蟆。
nonatomic修飾的對象不保證setter、getter的完整性纺阔,所以瘸彤,當多個線程訪問它的時候,他可能會返回一個未初始化的對象笛钝。所以质况,相較atomatic而言,速度更快婆翔,線程也是不安全的拯杠。