關於面試中的一二 ------------內存管理 持續更新

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

使用Analyze進行代碼的靜態分析

檢測內存泄漏的方法:(leak,內存泄露) 

(加分)爲避免不必要的麻煩, 多人開發時儘量使用ARC(蘋果會自動 給我們在需要的時候加release)


2.非自動內存管理情況下怎麼做單例模式.

創建單例設計模式的基本步驟 ·

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

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

>實現NScopying協議, 覆蓋allocWithZone:方法,確保用戶在直接分配和初始化對象時,不會產 生另一個對象。 

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

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


3.對於類方法(靜態方法)默認是autorelease的。所有類方法都會這樣嗎? 

1> 系統自帶的絕大數類方法(NSArray array]返回的對象,都是經過autorelease的

 2>alloc 的就不是...



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

1.對於沒有引用外部變量的Block,無論在ARC還是非ARC下,類型都是__NSGlobalBlock__,這種類型的block可以理解成一種全局的block,不需要考慮作用域問題。同時,對他進行Copy或者Retain操作也是無效的


2.應注意避免循環引用


5.什麼情況下會發生內存泄漏和內存溢出(內存泄露多了,內存放不下了,就溢出了.)?

當程序在申請內存後,無法釋放已申請的內存空間(例如一個對象或者變量使用完成後沒有釋放,這個對象一直佔用着內存),一次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被佔光。內存泄露會最終會導致內存溢出!

當程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了一個int,但給它存了long才能存下的數,那就是內存溢出。


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

不需要 這個對象被放到自動釋放池中 


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

JSON解析的方案

SBJson

JSONkit

NSJSONSerialization(ios自帶的)

可以用靜態工具檢測下.(一般情況下都用蘋果自帶的,都沒有造成內存泄露)


內存泄漏麼?


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

(以棧的方式實現的)(系統自動創建,系統自動釋放)棧裏面的(先進後出)

內存裏面有棧,棧裏面有自動釋放池.



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


只需要創建多個對象的時候...才需要手動管理自動釋放池.




 


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