block循环引用的理解和self.navigationController的理解

来源:互联网 发布:智云软件开发 编辑:程序博客网 时间:2024/06/15 06:46

        今天写代码的时候,发现同事写的代码有些难以理解,向同事询问的时候才发现原来现在的demo是他以前做的,出了一点小问题。


像这样的新手代码,由于不理解block,self.channelListViewModel引用这block,block会对其内部的变量全部retain一次,所以block也持有self,这样一来就会导致循环引用了,所以代码不能如此写。

        block是比较难写,因为要真正理解内存管理机制,才能写好。而像现在已经iOS9了,新的特性一直在出现,作为想入门iOS的新人实在纠结不已,要学新特性还是旧特性?学旧特性要学到什么程度?我当初学OC的时候,就是先学了ARC,MRC是iOS4以前的东西了,现在学ARC是时候了吧。但偏偏来到公司之后发现项目几乎全部都是MRC的,那怎么办,再学一次呗!当你看着许许多多的ARC代码后又因为项目原因不得不返回看MRC的代码,看着一堆release或autorelease看得头晕眼花,而且刚开始还不敢随便写,怕一写就内存泄露,因为摸不清规律,只知道要用没想过要释放掉。还好之前有学过一些,现在理解起来不困难。事实证明,先理解MRC绝对有好处,对于OC的内存管理那一套自然能做到心中有数,而且理解block也有绝对的好处。


        看到同事的代码中有一条用单例生成的self.navigationController,刚开始还不知道为什么要用单例来生成,然后也就默认这种方式是正确的,但是后来发现,每个controller在生成之后就会有一个默认的navigationController属性,而且工程里所有生成的navigationController的地址都是一样的,也就是说他们都是同个东西,这也就是常说的navigationController栈,用这个栈来做Controller的push和pop,就能很好地在每个Controller之间跳转。所以根本不用生成一个单例来管理这样的一个navigationController。

        大家都是新手,看到别人代码的不足其实很幸运,因为这些坑可以不用去踩一遍了,如果一切都按照书上或者网上的东西来学,永远都只能知道所有对的东西,但是错的不合理的地方还有很多,平常容易犯的错误还很多,懂得对的很重要,懂得错的也同样重要,所谓的知其然和知其所以然。

0 0
原创粉丝点击