《Effective Objective-C 2.0》读后总结 之四

Posted lisaloveyou1900

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Effective Objective-C 2.0》读后总结 之四相关的知识,希望对你有一定的参考价值。

写在前面的话:

1、从现在,这一刻,开始努力,动起来!

2、《Effective Objective-C 2.0》这是一本非常实在的书,各个章节用具体的例子告知读者如此这般的缘由!

3、书已经买了很久,也隔三差五的看一下,本次是按照本书章节,总结本书内容以及自己的体会!

4、愿共勉之!

第37条:理解“块”这一概念

37.1:块是C、C++、Objectivve-C中的语法闭包;

37.2:块可以接受参数,也可以返回值;

37.3:块可以分配在栈或堆上,也可以是全局的。分配在栈上的块可拷贝到堆里,这样的话,就和标准deObjective-C对象一样,具备引用计数了!

第38条:为常用的块类型创建typedef

38.1:以typedef重新定义块类型,可另块变量用起来更加简单;

38.2:定义新类型时应遵从现有的命名习惯,勿使其名称与别的类型相冲突;

38.3:不妨为同一个块签名定义多个类型别名。如果要重构的代码使用了块类型的某个别名,那么只需要修改响应typedef中的块签名即可,无须改动其他rypedef。

第39条:用handler块降低代码分散程度

39.1:在创建对象时,可以使用内联的handler块将相关业务逻辑一并声明;

39.1:在有多个实例对象需要监控时,如果采用委托模式,那么经常需要根据传入的对象来切换,而若改用handler块来实现,则可直接将块与相关对象放在一起;

39.2:涉及API时如果用到handler块,那么可以增加一个参数,使调用者可通过此参数来决定应该把块安排在哪个队列上执行。

第40条:用块引用其所属对象时不要出现保留环 

40.1:如果块所捕获的对象直接或间接地保留了块本身,那么就得当心保留还的问题;

40.2:一定要找个适当的时机解除保留环,而不能把责任推给API的的调用者。

第41条:多用派发队列,少用同步锁

41.1:派发队列可用来表述同步语义(synchronization semantic),这种做法要比使用@sychornized块或NSLock对象简单;

41.2:将同步与异步派发结合起来,可以实现与普通加锁机制一样的同步行为,而这么做却不会阻塞执行异步派发的线程;

41.3:使用同步队列及栅栏块,可以令同步行为更高效!

第42条:多用GCD,少用performSelector系列方法 

42.1:performSelector系列方法在内存管理方面容易有疏失。它无法确定将要执行的选择子具体是什么,因而ARC编译器也就无法插入使用的内存管理方法;

42.2:performSelector系列方法所能处理的选择子太过局限了,选择子的返回值类型以及发给方法的参数个数都收到限制;

42.3:如果想把任务放在另一个线程上执行,那么最好不要用performSelector系列方法,而是应该把任务封装到块里,然后调用大中枢派发机制的相关方法来实现。

第43条:掌握GCD及操作队列的使用时机

43.1:在解决多线程和任务管理问题时,派发队列并非唯一解决方案;

43.2:操作队列提供了一套高层的Objective-C API,能实现纯GCD所具备的绝大部分功能,而且还能完成一些更为复杂的操作,那些操作若改用GCD来实现,则需另外编写代码!

第44条:通过Dispatch Group机制,根据系统资源状况来执行任务

44.1:一系列任务可归入一个dispatch group之中。开发者可以在这组任务执行完毕时获得通知。

44.2:通过disaptch group,可以在并发式派发队列里同时执行多项任务。此时GCD会根据系统资源状况来调度这些并发执行的任务。开发者若自己来实现此功能,则需编写大量代码!

第45条:使用dispatc_once来执行秩序运行一次的线程安全代码

45.1:经常需要编写“只需执行一次的线程安全代码”(thread-safe single-code execution)。通过GCD所提供的diapstch_once函数,很容易就能实现此功能;

45.2:标记应该声明在static或gloabal作用域中,这样的话,在把只需执行一次的块传给dispatch_once函数时,传进去的标记也是相同的。

第46条:不要使用dispatch_get_current_queue

46.1:dispatch_get_current_queue函数的行为常常与开发者所预期的不同。此函数已经废弃,只能做调试之用。

46.2:由于派发队列是按照层级来组织的,所以无法单用某个队列对象来描述“当前队列”这一概念。

46.3:dispatch_get_current_queue函数用于解决由不可重入的代码所引发的死锁,然而能用此函数解决的问题,通常也能改用“队列特定数据”来解决!

 

本章主要是块和大中枢派发,可以说是目前OC变成的基础和核心!这部分相关的实例使用在项目开发中进一步完善和提升!!!

 

 

 

写在结尾处的话:每天努力一点点,也许不明显,但终究会有所帮助!

非常汗颜,整个九月份没有更新!愿继续努力!

以上是关于《Effective Objective-C 2.0》读后总结 之四的主要内容,如果未能解决你的问题,请参考以下文章

Effective Objective-C 2.0 — 第14条:理解“类对象“的用意

《Effective Objective-C 2.0》读后总结 之五

《Effective Objective-C 2.0》读后总结 之四

《Effective Objective-C 2.0》读后总结 之三

《Effective Objective-C 2.0 》 阅读笔记 item8

EFFECTIVE OBJECTIVE-C 2.0 TIPS 总结 CHAPTER 1 & CHAPTER 2