新手-delegatew问题

wendy_yt 2014-10-12 02:29:21
1,在dealloc为什么需要写delegate==nil,
2,在viewWillAppear中,为什么需要先调用[super viewWillAppear:YES];
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcd19860127 2014-10-13
  • 打赏
  • 举报
回复
在释放的时候,所有内部变量和属性设置为空,是良好的编码习惯,为了防止内存泄漏,tableview的delegate要置为空,是担心tableview在delegate 的dealloc后,tableview没有释放,还会回调delegate的方法,习惯很重要。 [super viewWillAppear:YES] 不写的时候,分析内存泄漏的时候会有警告,也许在super有一些操作,也许只是一种预测。
ReyZhang 2014-10-12
  • 打赏
  • 举报
回复
1. dealloc主要是处理对象的内存释放。应该是delegate = nil; 这句可以不加,如果是释放其它对象,可以在dealloc中设置对象为nil,这样做的好处时,能保证对象正常释放。为什么说delegate = nil可以不加呢,我们在声明delegate时一般声明为assign ,非retain 2.调用[super viewWillAppear:YES] 这是继承的一个特性,在覆写(override)一个父类的方法时,也可以执行父类中的语句,如果不想执行父类中的语句,这句可不加。
不担心 2014-10-12
  • 打赏
  • 举报
回复
delegate==nil如果不加上这句会造成以当前对象为代理的其他对象调用协议方法时出错的问题,还会造成引用计数器持续保持引用,而不会释放对象的问题. [super viewWillAppear:YES]这个是调用父类的viewWillAppear方法,如果父类的viewWillAppear方法中什么都没写,其实掉不掉用都一样.

29,030

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧