Test 单元测试单元是应用的最小可测试部件。单元测试(又称为模块测试,Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。如果代码之间的耦合度很小,那么可以将其分解成多个小单元,从而更易于测试。TDD(Test-Driven Development测试驱动开发)要求开发者在编写功能前先将其测试代码写好,然后边编写实现代码边进行测试,从而保证实现尽早发现并修改问题,因此 2015-12-06 #Tech
NSNotification NSNotificationCenter是Cocoa上实现观察者模式的中间桥梁,NSNotification抽象了观察者和被观察者之间的通信。因为观察者和被观察者没有类型限制的广播性,所以一般作为程序中用来解耦模块之间纵深通信的方法(MVC中主要用作M向C通信)。NSNotificationCenter是线程安全的,意味着可以在多线程中不用担心同步问题而轻松访问和使用,例如注册观察者,移除观察者, 2015-11-21 #Tech
Autorelease 它的意义对于Apple开发而言,ARC已经没有MRC容易内存出错了。在MRC的年代,一切都需要手动写,而计算机永远不会犯错,犯错的总是人,说不定在某个时刻大脑短路了或者打了一下哈欠,忘记少加了或者无意多加了个retain或者release,或者在业务逻辑交错复杂,或者在代码量显著增加,都有可能出一点小错。虽然MRC的年代已经有Static Analyse的工具,但是也不能确保是万能的。 我在MRC 2015-11-15 #Tech
Runtime应用 Runtime的能力很强大,有很多优秀的第三方库基于Runtime实现了不可思议的功能。Apple也有原生框架使用Runtime使得奇妙的技术得以被自然合理地使用。这里介绍4种:Associated Object、Method Swizzling(Aspect Oriented Programming)、KVO和NSZombie。 Associated Objects对象关联(或称为关联引用)是R 2015-11-07 #Tech
Block 尝试自己写了篇介绍block,由于文章写得太少加上技术沉淀不够,阅读起来不够舒服,所以基本知识就转载谈Objective-C Block的实现了,再额外加点自己的理解。 特点在我看来,block有以下几个特点: 匿名性:减少函数命名冲突 闭包性:使上下文持续有效 闭包性:增强抵抗参数变化 直观性:代码逻辑连贯紧凑 抽象性:分离变化解耦结构 匿名性:block块之所以能够像函数一样调用,是因为b 2015-10-31 #Tech
GCD 扩展 调度源GCD提供一些调度源接口来监测底层系统对象(比如Unix文件描述符、Mach端口、Unix信号、Unix虚拟文件系统节点、自定义源等等)的活动。不像阻塞等待事件发生或者反复轮询查看那样浪费资源也无法度量,调度源像kquque一样自动异步地提交任务到指定调度队列响应处理。 dispatch_source_create:创建一个新的调度源来检测底层系统对象,并响应事件自动提交事件回调任务到指定 2015-10-25 #Tech
GCD 基本 介绍中央调度(GCD)由语言特征、运行时库和系统改善组成,对运行iOS和OSX系统的多核硬件并行执行代码提供了系统的、全面的支持。BSD子系统,CoreFoundation和Cocoa的API都已扩展来使用这项改善技术来帮助系统和应用程序运行得更快速更有效更响应。考虑到一个应用程序能够有效地使用多核是多么的困难,更不用说在有不同核数的计算设备里和其他应用程序竞争。在系统级工作的GCD可以根据所有正 2015-10-18 #Tech
Runtime Message-Passing is the important part of Smalltalk (from which Objective-C derives), not objects. - Alan Kay Runtime是一个实现Objc动态特性的C库(Apple和GNU分别维护并开源自己的实现),不像C++那样在编译期间就必须严格确定函数与对象之间的关系,Objc在运行期间才能确定具 2015-10-07 #Tech
Thread 同步 同步工具涉及线程安全时,一个好的设计是最好的保护。避免共享资源,减少线程交互,这样可以缩小线程间干扰,但是一个完全没有干扰的设计是不可能的,就需要使用同步技术来确保安全。 原子操作原子操作是同步简单数据类型一个非常简单的形式,其优势是不阻塞线程竞争。对于简单的操作,比如递增一个计数器,原子操作比锁更有性能优势。MacOSX和iOS包含了许多32位和64位执行基本的数学运算和逻辑运算(比较-交换,测 2015-10-04 #Tech
Thread RunLoop 一般一个线程一次只执行一个任务,执行完成后就会退出。如果需要一个机制,让线程能随时响应处理新的任务并长时间存在不退出,那么它就是RunLoop。 RunLoop就是一个不断调度工作和处理事件的事件处理循环,对事件处理过程进行了更好的抽象和封装,让客户代码不用关心底层琐碎的消息处理实现的同时,能够轻松动态地添加删除执行任务。目的是让线程有任务时忙碌工作,没任务时休眠节能。 RunLoop不是完全自动 2015-10-01 #Tech