具体情况是,我需要在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,这个也是必须要做的。
添加回答
举报
0/150
提交
取消