记一个在使用代码注入时,可能导致访问悬垂指针崩溃的bug

05. 六月 2019 iOS 0
先看代码:

 

 

我们会在NSLog的地方加入断点,并且在debugger command

中写入expression tmpArr = [tmpStr componentsSeparatedByString:@"1"]

这样的代码注入一般是很常用的。
当我们出了函数作用域后,会产生一个悬垂指针的崩溃,“[__NSArrayM release]: message sent to deallocated instance 0x6000009285a0”
意思是确实是tmpArr指针指向的对象0x6000009285a0提前释放,导致了崩溃。

 

提前释放原因?

为什么会提前释放?
当我们把注入的代码改为:tmpArr指向一个新建的NSArray对象(空数组)或者其他对象(NSObject *),却不会有问题。