23 通过委托与数据源协议进行对象间通信

总结:委托模式的常规委托模式中,信息从类Class流向受委托者delegate。数据源模式,信息从数据源datasource流向class。数据源和受委托者可以是两个不同对象。有时候一个可选择方法可能在一个生命期中多次调用,如果每次都检查委托对象是否能响应选择子,那就显得多余了。可以使用位段(bitfield)数据类型将方法响应能力缓存起来。

24 将类的实现代码分散到便于管理的数个分类之中

总结:易于管理,便与调试。将应视为“私有”的方法归入名为Private的分类中,以隐藏实现细节。使用分类机制把类的实现代码划分成易于管理的小块。(具体)

25 总是为第三方类的分类名称加前缀

总结:向第三方类中添加分类时,总应给其名称和其中的方法名加上专用前缀。分类中晚加载的方法会覆盖先加载的同名方法。(具体)

26 勿在分类中声明属性

总结:属性是封装数据的方式,除了class-continuation分类之外,其他分类都无法向类中新增实例变量,因此,无法把实现属性所需的实例变量合成出来。应将分类机制理解为一种手段,目的在于扩展分类的功能,而非封装数据。要把数据所用的全部属性都定义在主接口中。在class-continuation分类之外的其他分类中,可以定义存取方法,但尽量不要定义属性。

27 使用class-continuation分类隐藏实现细节

总结:编写OC++代码时“class-continuation分类”也尤为有用。oc++是oc与c++的混合体,其代码可以用这两种语言来编写。由于兼容性原因,游戏后端一般用c++来写。另外有时候要使用的第三方库可能只有c++绑定,此时也必须使用c++编码。通过class-continuation分类向类中新增实例变量。如果某属性在主接口中声明为“只读”,而类的内部又要用设置方法修改此属性,那么就在class-continuation分类中将其扩展为“可读写”。把私有方法的原型声明在class-continuation分类里面。若想使类所遵循的协议不为人所知,则可于class-continuation分类中声明。

28 通过协议提供匿名对象

总结:协议可在某种程度上提供匿名类型id。具体的对象类型可以淡化成遵从某协议的id类型,协议里规定了对象所应实现的方法。使用匿名对象来隐藏类型名称(或类名)。如果具体类型不重要,重要的是对象能够响应特定方法,那么可使用匿名对象来表示。对于字典来说,键的标准内存管理语义是设置时拷贝,而值得语义则是设置时保留。

- (void)setObject:(id)object forKey:(id<NSCopying>)key;

effective OC2.0 52阅读笔记(四 协议与分类)的更多相关文章

  1. effective OC2.0 52阅读笔记(七 系统框架)

    47 熟悉系统框架 总结:将代码封装为动态库,并提供接口的头文件,就是框架.平时的三方应用都用静态库(因为iOS应用程序不允许在其中包含动态库),并不是真正的框架,然而也经常视为框架.例如:NSLin ...

  2. effective OC2.0 52阅读笔记(三 接口与API设计)

    第三章:接口与API设计 15 用前缀避免命名空间冲突 总结:避免重名符号错误的唯一办法是变相实现命名空间.为所有符号都加上命名前缀.类和分类都应加三字前缀.注意类实现文件中的纯C函数及全局变量,是算 ...

  3. effective OC2.0 52阅读笔记(二 对象、消息、运行期)

    第二章:对象.消息.运行期 6 理解属性这一概念 总结:OC解决硬编码偏移量问题的做法,一种方案是把实例变量当做一种存储偏移量所用的特殊变量,交由类对象保管,偏移量会在运行期查找,叫做稳固的“应用程序 ...

  4. effective OC2.0 52阅读笔记(一 熟悉Objective-C)

    第一章:熟悉Objective-C 1 了解objective-c语言的起源 总结:OC为C语言添加了面向对象的特性,是其超集.采用动态绑定的消息结构而非函数调用,也就是说,要在运行时才检查对象类型及 ...

  5. effective OC2.0 52阅读笔记(六 块与大中枢派发)

    派发队列:dispatch_queue 操作队列:NSOperationQueue  组:dispathc_group_t 37 理解“块”这一概念 总结:块就是一个值,且自有其相关类型.块的强大之处 ...

  6. effective OC2.0 52阅读笔记(五 内存管理)

    第五章:内存管理 29 理解引用计数 30 以ARC简化引用计数 总结:ARC通过命名约定将内存管理规则标准化.其他编程语言很少像OC这样强调命名.ARC通过设置全局数据结构(此数据结构的具体内容因处 ...

  7. 论文阅读笔记四:CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network(ECCV2016)

    前面曾提到过CTPN,这里就学习一下,首先还是老套路,从论文学起吧.这里给出英文原文论文网址供大家阅读:https://arxiv.org/abs/1609.03605. CTPN,以前一直认为缩写一 ...

  8. 《大数据互联网大规模数据挖掘与分布式处理》阅读笔记(四)-----WEB广告

    作者: 沈慧 目前,许多WEB应用通过广告而维持生计,从在线广告中获益最多的是搜索应用,“adwords”模型就是一种用于搜索查询和广告匹配的模型.这一章介绍了在线广告的相关问题.在线算法.Adwor ...

  9. 论文阅读笔记四十九:ScratchDet: Training Single-Shot Object Detectors from Scratch(CVPR2019)

    论文原址:https://arxiv.org/abs/1810.08425 github:https://github.com/KimSoybean/ScratchDet 摘要 当前较为流行的检测算法 ...

随机推荐

  1. php 选择排序法

    private function demo(array $arr = array()){ $len = count($arr); if ($len == 1) return $arr; else fo ...

  2. Hdu.1325.Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. 大型网站SEO优化策略框架

  4. Mysql BLOB和TEXT类型

      BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. A binary la ...

  5. Redhat EL安装curses

    1.下载curses安装包 http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz2. tar -zxvf  nurses-5.6.tar.gz 3 ...

  6. BZOJ2780——[Spoj]8093 Sevenk Love Oimaster

    0.题意:给定N个原始字符串S,M次查询某个特殊的字符串S'在多少个原始串中出现过. 1.分析:这个题我们第一感觉就是可以用后缀自动机来搞,然后我们发现不是本质不同的字串..求出现过的次数,也就是说多 ...

  7. Android学习笔记(二)——探究一个活动

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...

  8. HTML5 localStorage 的使用

      在前端开发中,我们会常遇到要在两个甚至多个html之间通信,我们可以在url中添加参数,但是当要传递的数据量较大较多时呢,不妨试试html5 的localStorage吧. 1) 检测你的浏览器是 ...

  9. 剑指Offer 变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   其实就是斐波那契数列问题. 假设f(n)是n个台阶跳的次数. f(1) = ...

  10. python 字节与字符串转换

    name = 'laogaoyang' nameBytes = name.encode('utf-8') # 字节 nameStr = nameBytes.decode('utf-8')# 字符串 p ...