iOS 內存管理筆記

1.蘋果的內存管理是通過引用計數的來實現內存的回收的!當你用new/alloc/copy/mutableCopy創建A對象時,A的引用計數爲1,當B對象引用A是引用計數爲2!(NSobject *B = A這種是弱引用,引用計數不會加1,NSobject *B = [A retain];或者你把A對象存入數組或字典引用計數都加1)

2.copy/mutableCopy區別:當A對象爲不可變對象時(NSString *B = [A copy];這時copy相當於retain,A和B指向同一塊內存,引用計數都是2.NSMutableString *B = [AmutableCopy];這時mutableCopy相當於new了一個可變對象,A和B的引用計數都是1).當A對象爲可變對象時(NSString *B = [A copy];這時copy相當於new了一個不可變對象,A和B的引用計數都是1,NSMutableString *B = [A mutableCopy];這時mutableCopy相當於new了一個可變對象,A和B的引用計數都是1).

3.蘋果的內存管理機制有2種ARC(自動引用計數)和MRC(手動引用計數),他們之間的區別在於在MRC模式下你需要手動的爲每個對象添加retain和release代碼,在ARC下你就不需要手動的去添加這些retain和release代碼了,編譯器會自動幫你添加這些代碼.

4.我們可以通過Product-->Analyze進行靜態代碼的分析,查看有無內存泄漏.(內存泄漏:應該釋放的內存沒有釋放,內存溢出:請求的內存不夠用)

5.ARC和Autorelease的區別:ARC就是編譯器會自動幫你添加添加retain和release代碼,而Autorelease實際上只是把對release的調用延遲了,對於每一個Autorelease,系統只是把該Object放入了當前的Autorelease pool中,當該pool被釋放時,該pool中的所有Object會被調用Release。

6.在創建屬性時對retain/copy/assign/strong/weak 關鍵字的使用.其中絕對部分類屬性使用retain或strong(強引用,retain是MRC下使用的,現在用strong不過NSString類是個特例,它的關鍵字用copy),delegate用(assign或weak,其中weak和assign都是弱引用,它們之間的區別是對象消失後把指針置爲nil,避免了野指針,assign用於基礎數據類型)

7.ios的內存管理原則:有加有減,最後一個對象的引用計數一定要歸零

8.如果需要對特定文件開啓或關閉ARC,可以在工程選項中選擇Targets -> Compile Phases -> Compile Sources,在裏面找到對應文件,添加flag:打開ARC:-fobjc-arc,關閉ARC:-fno-objc-arc。

9.Xcode5以後關閉ARC模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章