• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - UIViewController 未释放

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:26:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我遇到这个问题已经有一段时间了,并尝试了几种方法来避免它,但现在我决定一劳永逸地解决它

我有一个聊天 View Controller ,它使用 KVO 观察 NSSet,ChatVC 有一个 UITableView,并且每次将新的 ChatMessage 插入到 NSSet 时,它也会作为 UITableViewCell 添加到 tableview。

现在,我的问题不在于观察,我猜它与内存管理有关。 在我的 ChatVC 中,方法 dealloc 永远不会被调用,因此 vc 始终在后台观察该 NSSet 对象。

我已尝试在 viewWillDisappear 上手动删除观察者,但 ChatVC 仍在后台。

使用 Instruments 对其进行分析向我表明,它实际上来自导致 ChatVC 的 pushViewController:

MZChatViewController* chatViewController = [[MZChatViewController alloc] initWithNibName"MZChatViewController" bundle:nil];
chatViewController.shouldShowIndetermineConnectingIndicator = showIndicator;

// instruments shows 100% on this row
[self.navigationController pushViewController:chatViewController animated:animated];

chatViewController = nil;

在这里稍作搜索,谷歌实际上没有给我任何帮助,我已经通过了我在那个 VC 中的所有代码,并且真的努力寻找一个保留循环,它也可能导致这个没有释放问题,但什么也没找到。

PS。 Xcode 5、iOS 7 SDK、ARC

已解决: 显然它与 pushViewController:animated: 方法无关,Instruments 只是将此点标记为保留循环的原因,因为它正在触发一个在 viewDidLoad 处运行的 NSTimer。 因此,在 viewWillDisappear 中使该计时器无效解决了它。



Best Answer-推荐答案


虽然这不是这里的问题,但也许这会帮助遇到类似问题的其他人解除分配 UIViewControllers。

我们的 UIViewController 没有被释放,因为自定义委托(delegate)属性持有强引用。

关于ios - UIViewController 未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501736/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap