为了账号安全,请及时绑定邮箱和手机立即绑定

在使用reuseIdentifier的情况下,UITableview的cell在什么情况下还会被dealloc?

在使用reuseIdentifier的情况下,UITableview的cell在什么情况下还会被dealloc?

慕姐4208626 2019-04-06 08:31:41
具体情况是,我需要在tableview中加载网络图片。使用了notification的方法发送消息。但有时候cell太多了,会crash。查看log,发现是有对应的cell在原本应该能接收正常的notification的时候已经被提前dealloc了。这里疑问有两点:1.notificationcenter不是应该对observer有索引计数么?为何还会被dealloc?2.uitableview里面的cell在什么情况下会被dealloc呢?难道是内存不够用?reuseIdentifier的方法应该好使的啊。网上查了下,对给dealloc的对象发送notification消息的处理,一般是在对象dealloc的时候,注销掉观察者。但是ARC下面是没有dealloc的啊。向各位大侠求教
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

1.notificationcenter没有retainobserver,这一点写个demo很容易验证
2.个人推测,uitableview维护了一个"reusecell"栈,假如你之前同时显示了10个cell,那么至少alloc了10个cell,也就是说栈里有10个cell。当后来屏幕上只需要显示3个cell的时候,那么栈里有7个空闲待用的cell。这个时候如果内存不足,uitableview会把未使用的cell释放掉。当然以上这些纯属个人推测,未经过严格验证。
3.ARC下可以重写dealloc,只是在重写的dealloc里面,不允许执行[superdealloc];,这个官方文档上有说明,也就是说,你仍然可以重写cell的dealloc方法,在其中remove掉obsever,这个也是必须要做的。
                            
查看完整回答
反对 回复 2019-04-06
  • 2 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信