iOS Block用法和实现原理

《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、Block、GCD三个概念,有趣是因为讲原理、实现的部分是其它iOS专业书籍里少有的。然而每个章节不读个三五遍还是比较难理解贯通的。本文针对其中的Block部分做些简单的笔记记录,讲述Block的用法和部分实现原理,详细解说从原书中寻。

Block概要

Block:带有自动变量的匿名函数。

匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域。

自动变量:栈上声明的一个变量不是静态变量和全局变量,是不可以在这个栈内声明的匿名函数中使用的,但在Block中却可以。

虽然使用Block不用声明类,但是Blo......

关于代码风格

为什么强调代码风格

不同的语言,不同的项目,都有自己的风格,就像每个人都有自己的特点一样。

代码风格是一个不容易引起注意,但又回避不了的问题。一个人独自开发的工作,对代码风格是没有明显感知的,但一群人一起开发就不一样了。当吐槽别人代码的时候,或为自己几个月前的代码汗颜的时候,很可能是因为代码风格上有了分歧,该引起所有人注意了。

一个项目代码风格的确立和维护,都是需要耗费时间和精力的,但从下面几点好处看,维护代码风格是件高收益的事:

提高阅读代码效率

减少语法、逻辑理解的歧义,方便更快了解别人的代码,减少沟通成本

杜绝了以后关于大括号是否需要换行等风格问题的低效争论,团队更加和谐

新人依据......

iOS自定义push样式的present动画

在iOS开发中,用UINavigationController可以push出一个界面(UIViewController),但不能push出一个UINavigationController。

如果尝试下这么做,应用会抛出异常,并给出log提示:

reason: 'Pushing a navigation controller is not supported'

因为一些奇怪的产品、交互需求,或者是旧有的界面层级问题,非要在一个已有的UINavigationController中以从左到右的动画方式(即系统默认的push动画样式)展示一个UINavigationContro......