1、基于斷點(diǎn)的底層探索(
)
定義一個Person類:
person類
:點(diǎn)擊進(jìn)入alloc方法的定義,找到
+ (instancetype)alloc OBJC_SWIFT_UNAVAILABLE("use object initializers instead");
之后無法進(jìn)一步追溯。
:符號斷點(diǎn)alloc方法,匯編代碼分析。
注:app啟動預(yù)先會調(diào)用很多alloc方法,最好在Person類的alloc之前都disable符號斷點(diǎn),得到如下:
_objc_rootAlloc方法

跳轉(zhuǎn)_objc_rootAllocWithZone,所屬libobjc.A.dylib

calloc方法,所屬 libsystem_malloc.dylib

malloc_zone_calloc方法,所屬libsystem_malloc.dylib
得到malloc_zone_calloc方法,如果繼續(xù)用符號斷點(diǎn)進(jìn)行跟進(jìn)會發(fā)現(xiàn)沒有明顯的alloc的標(biāo)示,無法進(jìn)一步分析,這時候就需要源碼分析了。
2、objc4源碼環(huán)境配置
源碼路徑地址:https://opensource.apple.com/ 下載地址:https://opensource.apple.com/tarballs
可以在iOS最新版本中web界面搜索objc找到如下:(這里為什么搜索objc,主要之前是基于libobjc.A.dylib,同樣也可以搜索malloc,基于libsystem_malloc.dylib)

objc4-781源碼

庫和引用

main方法
然后運(yùn)行,會發(fā)現(xiàn)報(bào)錯 找不到頭文件,這里參考了Style_月月同學(xué)文章 http://www.itdecent.cn/p/2fae148f015f,添加相應(yīng)的缺失文件。這里我補(bǔ)充一下我遇到的兩個個文件補(bǔ)充完后仍存在的文章未提到的問題:
1、文件方法中存在一個
方法,宏定義報(bào)錯。
uint32_topts = OS_UNFAIR_LOCK_DATA_SYNCHRONIZATION | OS_UNFAIR_LOCK_ADAPTIVE_SPIN;
由于沒有這個定義所以報(bào)錯,這里將后面這個選項(xiàng)刪除。
2、文件中,
方法報(bào)錯。
在 添加
,debug和release都加入。
這樣就可以繼續(xù)調(diào)試了
