iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)

1. 打开instruments

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第1张图片
图片.png

2. 选择zombies

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第2张图片
图片.png

3. 点击左上角红点开始运行记录

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第3张图片
图片.png

运行后的效果

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第4张图片
图片.png

3. 重现错误

在模拟器上操作程序,直到程序崩溃。崩溃时,如果是僵尸对象导致的,instruments的右上角会弹出提示框。

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第5张图片
图片.png

提示框

提示框上提示 RechargeViewController有一个僵尸对象,点击最后的箭头即可显示详情。

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第6张图片
图片.png

4. 详情列表

点击后出现详情列表,看不懂没关系,直接翻到最后一行

图片.png

5. 错误定位

最后一行,zombie 可以看到是SKProductsRequest,原来是内购的商品请求成为僵尸对象了。在充值界面内购请求商品,但是返回的时候,RechargeViewController被销毁,SKProductsRequest却没有释放。回到内购代码那里修改一下即可。

iOS开发错误调适instruments之Zombies的使用(检测僵尸对象)_第7张图片
图片.png

代码修改如下

- (void)dealloc{
    NSLog(@"销毁");
    self.request.delegate = nil;
    [self.request cancel];
    self.request = nil;
}

错误总结:一般导致僵尸对象的原因都是通知,观察者在需要移除的地方没有移除,发现错误位置后,查找一下当前页面的通知和观察者,没移除的要移除。

你可能感兴趣的:(iOS开发错误调适instruments之Zombies的使用(检测僵尸对象))