怎麼保證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操作.
只需要創建多個對象的時候...才需要手動管理自動釋放池.