zoukankan      html  css  js  c++  java
  • Effective Objective-C 2.0读书笔记(八)

    第43条,掌握 GCD 及操作队列的使用时机(重点)

    • GCD是纯C的API,而操作队列则是OC的对象。
    • GCD中,任务用块来表示,块是个轻量级的数据结构。
    • 那些只需要使用一次的代码,使用GCD的dispatch_once最方便。
    • NSOperation及NSOperationQueue的好处:取消某个操作;指定操作间的依赖关系;通过键值观测机制监控NSOperation的属性(是否取消isCancelled、是否操作完成isFinished);指定操作的优先级;重用NSOperation对象。
    • 在解决多线程与任务管理问题时,派发队列并非唯一方案。
    • 操作队列提供了一套高层的OC API能实现纯C GCD所具备的绝大部分功能,而且还能完成一些更复杂的操作,那些操作若改用GCD来实现,则需另外编写代码。

    关键词:NSOperation、NSOperationQueue

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

    • dispatch group 是GCD的一项特性,能够把任务分组。
    • 作用:将并发执行的多任务合为一组,然后统一执行完毕后回调。
    • 实际中应用:压缩一系列的文件。
    • dispatch group的样式:dispatch_group_t、dispatch_group_create、dispatch_group_async、dispatch_group_enter/dispatch_group_leave、dispatch_group_wait
    • dispatch_apply:会阻塞线程,直到所有的任务都执行完毕为止。假如把块派给了当前队列(或者体系中高于当前队列的某个串行队列),就将导致死锁。
    • 一系列任务可归入一个dispatch group之中,开发者可以在这组任务执行完毕时获得通知。
    • 通过dispatch group 可以在并发式队列里同时执行多项任务。此时GCD会根据系统资源状况来调度这些并发执行的任务。开发者若自己来实现此功能,则需编写大量代码。

    关键词:dispatch group、多任务打包处理

    第45条,使用 dispatch_once 来执行只需运行一次的线程安全代码

    • dispatch_once 能够简化并彻底保证线程的安全,开发者无需担心加锁或同步。
    • 经常需要编写“只需要执行一次的线程安全代码”,通过GCD所提供的dispatch_once函数,很容易实现此功能。
    • 标记应该声明在static或global作用域中,这样的话,在把只需要执行一次的块给dispatch_once函数时,传进去的标记也是相同的。

    关键词:执行一次的线程安全、dispatch_once

    第46条,不要使用 dispatch_get_current_queue

    • dispatch_get_current_queue 函数的行为常常与开发者所预期的不同。此函数已经废弃,只应做调试之用。
    • 由于派发队列是按层级来组织的,所以无法单用某个队列对象来描述“当前队列”这一概念。
    • dispatch_get_current_queue 函数用于解决由不可重入的代码所引发的死锁,然而能用此函数解决的问题,通常也能改用“队列特定数据”来解决。

    关键词:dispatch_get_current_queue

    第47条,熟悉系统框架

    • 将一系列代码封装为动态库,并在其中放入描述其接口的头文件,这样做出来的东西就叫框架。
    • iOS系统框架仍然使用的动态库。
    • CFNetwork 提供了C语言级别的网络通信能力。
    • CoreAudio C语言API可用来操作设备上的音频硬件。
    • AVFoundation:此框架提供了OC对象可用来回放并录制音频及视频。
    • CoreData 提供了OC接口可将对象放入数据库。
    • CoreText 提供了C语言接口可以高效执行文字排版及渲染操作。
    • CoreAnimation 是OC语言写成,UI框架用这些工具渲染图形并播放动画。
    • CoreGraphics 框架以C语言写成,提供了2D渲染所必备的数据结构与函数。
    • Social提供了地图功能。
    • 许多系统框架都可以直接使用,其中最重要的是Foundation与CoreFoundation,这两个框架提供了构建应用程序所需的许多核心功能。
    • 很多常见任务都能用框架来做,例如音频与视频的处理、网络通信、数据处理。
    • 用纯C写成的框架和用OC写成的一样重要,若想成为优秀的OC开发者,应掌握C语言的核心概念。

    关键词:系统框架

    第48条,多用块枚举,少用 for 循环

    • 遍历collection有四种方式,最基本的办法是for循环,其次是NSEnumerator遍历法以及快速遍历法,最新、最先进的方法则是“块枚举法”。
    • “块枚举法”本身就能通过GCD来并发执行遍历操作,无须另行编写代码。而采用其他遍历方式则无法轻易实现这一点。
    • 若提前知道待遍历的collection含有何种对象,则应修改块签名,指出对象的具体类型。

    关键词:块枚举

  • 相关阅读:
    Vim快捷键,行首行尾
    java程序 cpu占用过高分析
    svn merge操作
    linux root用户无法删除文件,提示permission denied
    诡异问题:tomcat启动一直卡住,strace跟踪提示apache-tomcat核心文件找不到。
    转:xcode项目打不开:incompatible project version问题
    路由器当交换机用
    visual studio远程调试 remote debugger
    Sql server锁
    long 在不同操作系统下所占用的字节数
  • 原文地址:https://www.cnblogs.com/akiha/p/13267662.html
Copyright © 2011-2022 走看看