delegate==nil如果不加上这句会造成以当前对象为代理的其他对象调用协议方法时出错的问题,还会造成引用计数器持续保持引用,而不会释放对象的问题.[super viewWillAppear:YES]这个是调用父类的viewWillAppear方法,如果父类的viewWillAppear方法中什么都没写,其实掉不掉用都一样.

解决方案 »

  1.   

    1.  dealloc主要是处理对象的内存释放。应该是delegate = nil; 这句可以不加,如果是释放其它对象,可以在dealloc中设置对象为nil,这样做的好处时,能保证对象正常释放。为什么说delegate = nil可以不加呢,我们在声明delegate时一般声明为assign ,非retain2.调用[super viewWillAppear:YES] 这是继承的一个特性,在覆写(override)一个父类的方法时,也可以执行父类中的语句,如果不想执行父类中的语句,这句可不加。
      

  2.   

    在释放的时候,所有内部变量和属性设置为空,是良好的编码习惯,为了防止内存泄漏,tableview的delegate要置为空,是担心tableview在delegate 的dealloc后,tableview没有释放,还会回调delegate的方法,习惯很重要。[super viewWillAppear:YES] 不写的时候,分析内存泄漏的时候会有警告,也许在super有一些操作,也许只是一种预测。