二十二、內存管理

二十二、內存管理

1.頁面返回的時候內存會不會下降,為什么

答案是:那要看你想不想讓它降下來。比如說一開始是從甲跳轉到的乙,那么返回時如果乙的對象被釋放掉了內存就會下降,反之不會降。

先說在push跳轉中,如果甲跳轉前是靠著一個局部變量的乙的對象來實現跳轉的,那按理說出了這個某按鈕的點擊事件外后,乙的局部變量就立即應該被釋放了,那乙的頁面也顯示不出來了。。。。怎么可能呢!所以,其實對乙這個局部變量的對象的真正持有者是他們所有頁面的navigationcontroller。在甲調用push到乙的那句方法的一瞬間乙就已經被壓到navigationcontroller的childviewcontrollers隊列里去了,所以乙的這個對象的持有權是由navigationcontroller決定的啦。這種情況下,要想返回頁面時內存能被釋放的話就要特意寫一句讓navigationcontroller pop一下之類的話了;否則要想由甲頁面來決定是否釋放乙的話就得讓這個按鈕的點擊事件里使用的對象是一個特意在甲中定義的乙的成員屬性。

如果是present跳轉的話,其實在甲present乙的時候,甲就持有乙了,甲對乙的引用計數就加一了,如果是局部變量的乙對象的話,那么跳轉過去后乙的引用計數是二,因為乙的臨時對象先被創建,又被甲持有,這樣,乙頁面出了甲的這個點擊事件方法也就引用計數歸零,不復存在了;如果乙是一個全局的屬性,那么出了點擊事件方法后乙的去留還要由甲來決定。

可以重用VC;

用instruments 的leak來查找;


2.常用內存檢查的工具和方法

打包archive,單元測試,1)analyze靜態代碼檢查(不需要運行就能檢查)

2)用instruments 的leak來查找;

3)allocations

4)重寫dealloc方法(定義一個基類,在里面重寫dealloc方法,加一句打印的話,所有該集成uiviewcontroller的就繼承它就行了)

??http://blog.sina.com.cn/s/blog_14d7dd6710102vzq5.html

3.對象什么時候會被釋放,過程是怎樣的

引用計數為0的時候唄,runloop循環檢測機制

4.ARC,MRC各自的具體實現是怎樣的

arc:當ARC開啟時,編譯器將自動在代碼合適的地方插入retain,release和autorelease,不可以寫[super dealloc],ARC是Objective-C編譯器的特性;

mrc:就是要自己去實現retain,release和autorelease,可以寫[super dealloc];

5.什么是內存泄漏,什么情況下會發生,怎么解決

6.block為什么要用copy關鍵字

7.delegate可以使用assign關鍵字嗎

8.iOS應用的內存釋放機制

9.iOS應用從別的應用返回自己這個應用的過程

10.重復釋放的問題

好像ARC可以解決對象重復釋放的問題。

11.ARC下循環引用的問題

解決這個問題就可以兩個互相引用的對象一個使用強引用,另一個使用弱引用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 29.理解引用計數 Objective-C語言使用引用計數來管理內存,也就是說,每個對象都有個可以遞增或遞減的計數...
    Code_Ninja閱讀 1,532評論 1 3
  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,008評論 1 16
  • 內存管理是程序在運行時分配內存、使用內存,并在程序完成時釋放內存的過程。在Objective-C中,也被看作是在眾...
    蹲瓜閱讀 3,184評論 1 8
  • iOS內存管理 概述 什么是內存管理 應用程序內存管理是在程序運行時分配內存(比如創建一個對象,會增加內存占用)與...
    蚊香醬閱讀 5,761評論 8 119
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472