iOS开发错误调适instruments之Zombies的使用(
2017-04-08 本文已影响91人
夜凉听风雨
1. 打开instruments
![](https://img.haomeiwen.com/i2541004/df90328f68624930.png)
2. 选择zombies
![](https://img.haomeiwen.com/i2541004/5c0c0442e00e1443.png)
3. 点击左上角红点开始运行记录
![](https://img.haomeiwen.com/i2541004/d5f9b4fe6ec1a545.png)
运行后的效果
![](https://img.haomeiwen.com/i2541004/149bf4abb37d2370.png)
3. 重现错误
在模拟器上操作程序,直到程序崩溃。崩溃时,如果是僵尸对象导致的,instruments的右上角会弹出提示框。
![](https://img.haomeiwen.com/i2541004/c77a6a4f19e4d872.png)
提示框
提示框上提示 RechargeViewController有一个僵尸对象,点击最后的箭头即可显示详情。
![](https://img.haomeiwen.com/i2541004/2df5233be3ff7a2e.png)
4. 详情列表
点击后出现详情列表,看不懂没关系,直接翻到最后一行
![](https://img.haomeiwen.com/i2541004/fb554df3c71d6a6f.png)
5. 错误定位
最后一行,zombie 可以看到是SKProductsRequest,原来是内购的商品请求成为僵尸对象了。在充值界面内购请求商品,但是返回的时候,RechargeViewController被销毁,SKProductsRequest却没有释放。回到内购代码那里修改一下即可。
![](https://img.haomeiwen.com/i2541004/64b312ba2f62b386.png)
代码修改如下
- (void)dealloc{
NSLog(@"销毁");
self.request.delegate = nil;
[self.request cancel];
self.request = nil;
}
错误总结:一般导致僵尸对象的原因都是通知,观察者在需要移除的地方没有移除,发现错误位置后,查找一下当前页面的通知和观察者,没移除的要移除。