您的位置:首页 > 移动开发 > IOS开发

iOS [xxxxController respondsToSelector:]: message sent to deallocated instance 0x1310293e0崩溃问题

2018-02-23 14:33 513 查看
崩溃原因:

[xxxxController respondsToSelector:]: message sent to deallocated instance 0x1310293e0


场景复现:

从产品列表页跳转到产品详情页,返回到产品列表页,切换tabItem,再返回到产品的tabItem,出现崩溃到main函数的现象,使用僵尸模式复现崩溃现象,得到
[xxxxController respondsToSelector:]: message sent to deallocated instance 0x1310293e0
的崩溃原因。

问题解析:

由于控制器释放,又再次向这个VC调用了某些请求导致崩溃。出现该问题的原因,大部分是由于实现了
xxx.delegate = self
;当VC释放后,这个xx还没有被释放,所以xx的回调方法还在调用delegate即这里的VC,所以崩溃就发生了。

查找原因:

针对该控制器VC中所有添加delegate的代码,一个一个排查,最后发现在基类BaseViewController中使用了
self.navigationController.delegate = self
;进行实现导航控制器代理方法了,使用完之后没有释放。

错误解决办法:

在该控制器VC的
- (void)dealloc {}
方法中实现
self.navigationController.delegate = nil
,由于dealloc的延迟调用,还是无法解决问题。

在该控制器VC的
- (void)viewWillDisappear:(BOOL)animated {}
方法中实现
self.navigationController.delegate = nil
,但是会导致基类BaseViewController的导航控制器代理方法失效。

正确解决办法:

在该控制器VC的基类BaseViewController中进行解决:

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

self.navigationController.delegate = self;
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];

self.navigationController.delegate = nil;
}


ps:个人见解,如有错误,还请评论指出,多多指教。

同步简书地址:https://www.jianshu.com/p/9810f21f262d
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐