ARC是蘋果公司在iOS4.3之後纔出現的內存管理機制,全名爲: ARC(Automatic Reference Counting)。簡單地說,就是代碼中自動加入了retain/release,原先需要手動添加的用來處理內存管理的引用計數的代碼可以自動地由編譯器完成了。但其又有別於java,c#的自動垃圾回收機制。甚至在本人理解中,覺得ARC更優於JVM一些。
在ARC中又引入了兩個關鍵字:strong,weak,
強指針:strong,對應手動內存管理的retain關鍵字
@property(nonatomic,strong)NSString * name;
弱指針:weak,對應手動內存管理的assign關鍵字,
@property(nonatomic,strong)NSString * card;
當然,也不是說在ARC模式下,assign關鍵字完全被weak取代,在基本數據類型中,我們還是需要使用到assign,而strong,weak一定都是應用在對象類型變量上。
@property(nonatomic,assign)int age;
總結:
1.只要有強指針(strong)指向一個對象,那麼系統就不會回收該對象
2.只要沒有強指針(strong)指向一個對象,系統立即回收該對象。(這就是ARC與JVM的區別,JVM是一種分配機制,當內存沒有壓力的時候,是不會回收對象)
3.弱指針(weak)不影響對象被回收
4.默認情況下,所有的指針都是強指針類型的。
注意:
- 1.代碼中不能再手動調用 retain, release, retain, autorelease
- 2.不重載dealloc方法,但是如果是釋放對象內存以外的處理,是可以重寫該函數的,但是不能調用[super dealloc]
- 3.不能使用NSAllocateObject, NSDeallocateObject
- 4. id與void *間的如果cast時需要用特定的方法(__bridge關鍵字)
- 5.不能使用NSAutoReleasePool、而需要@autoreleasepool塊
- 6.不能使用“new”開始的屬性名稱 (如果使用會有下面的編譯錯誤”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”