iOS面試題05-父子控制器、內存管理

內存管理、父子控制器面試題

1.創建父子關係控制器有什麼用git

回答:1>監聽屏幕選中github

       2>若是想拿到你當前的很小的一個控制器所在的導航控制器必需要跟外面比較大的控制器創建父子關係,才能一層一層往上拿導航控制器面試

2.第三方API是怎麼用的?設計模式

回答:0>大公司的開放API數組

        1>github上面別人發佈的框架緩存

        2>第三方API在官方文檔都有說明,按照官方文檔一步一步作多線程

       3>參考官方提供的示例程序框架

       4>先本身建立一個工程試試,等熟悉了,在使用到項目中線程

3.列舉如今熟悉iOS開發庫和第三方開發庫?設計

回答:友盟(包括第三方登陸和分享),高德地圖,百度地圖,AFN,SDWebImage,MBProgressHUB、MJExtension等等

 

4.怎麼保證多人開發進行內存泄露的檢查

回答:1>使用Analyze進行代碼的靜態分析

         2>爲避免不須要的麻煩,多人開發時儘可能使用ARC

 

5.非自動內存管理狀況下怎麼作單例模式

回答:建立單例設計模式的基本步驟

        1>聲明一個單件對象的靜態實例,並初始化爲nil

        2>建立一個類的類工廠方法,當且僅當這個類的實例爲nil時生成一個該類的實例

        2>實現NScopying挾制,覆蓋allocWithZone:方法,確保用戶在直接分配對象時,不會產生另外一個對象

        3>覆蓋release、autorelease、retain、retainCount方法,以此確保單例的狀態。

        4>在多線程的環境中,注意使用@synchronized關鍵字或GCD,確保靜態實例被正確的建立和初始化

 

6.對於類方法(靜態方法)默認是autorelease的,全部類方法都會這樣嗎?

回答:1>系統自帶的絕大數類方法返回的對象,都是通過autorelease的

 

7.block在ARC中和MRC中的用法有什麼區別,須要注意什麼

回答:1>對於沒有引用外部變量的Block,不管在ARC仍是非ARC下,類型都是

        __NSGlobalBlock__,這種類型

        2>無論是ARC和MRC,block都應該用copy操做來持有

        3>應該注意避免循環引用

       @1>ARC:__weak/ __unscafe_unretained

       @2>MRC:__block 

 

8.什麼狀況下會引發內存泄露和內存溢出?

回答:內存泄露:該釋放的沒有釋放。當程序在申請內存後,沒法釋放已申請的內存空間(例如一個對象或者變量使用完成後沒有釋放,這個對象一直佔用着內存),一次內存泄露危險能夠胡烈,但內存泄露堆積後果很嚴重,不管多少內存,早晚被佔光。

       內存泄露會最終致使內存溢出

       內存溢出:內存滿了,不夠用。

        當程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;

        好比申請了一個int , 但給它存了long 才能存下的數,那就是內存溢出

 

9.[NSArray arrayWithObject:<id>] 這個方法添加對象後,須要對這個數組作釋放操做嗎?

回答:不須要,這個對象被釋放到自動緩存池當中

 

10.JSON數據如何解析,和解析數據的時候有內存泄露嗎?有的話如何理解

回答:1>JSON解析的方案

        @1>SBJson

        @2>JSONkit

        @3>NSJSONSerialization

 

11.自動釋放池底層怎麼實現?

回答:自動釋放池以棧的形式實現:當你建立一個新的自動釋放池時,它將被添加到棧頂。當一個對象收到發送autorelease消息時,它被添加到當前線程的處於棧頂的自動釋放吃中,當自動釋放吃被回收時,他們從棧中被刪除,而且給池子裏面全部的對象都會作一次release操做

相關文章
相關標籤/搜索