標籤:
記憶體管理、父子控制器面試題
1.建立父子關係控制器有什麼用
回答:1>監聽螢幕選中
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>建立一個類的類Factory 方法,若且唯若這個類的執行個體為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操作
iOS面試題05-父子控制器、記憶體管理