若想令自己缩写的对象具有拷贝功能, 则需要实现 NSCopying 协议,

如果自定义的对象分为可变版本与不可变版本, 那么就要同时实现 NSCopying 协议和 NSMutableCopying 协议

复制对象是需要决定采用浅拷贝还是深拷贝, 一般情况下采用浅拷贝,

如果你所写的对象需要深拷贝, 那么就考虑新增一个专门执行深拷贝的方法.\

// 协议与分类

OC 语言有意向特性叫做 '协议', 它与 Java 的 '接口'类似, OC 不支持多重继承,因而我们吧某个类应该实现的一系列方法定义在协议中.协议最常见的是实现委托模式, 不过也有其他用法, 理解并善用协议可令代码边的易于维护, 因为协议这种方式能很好的描述接口.

'分类'也是 OC 的一项重要语言特性, 利用分类机制,我们无需继承子类即可直接为当前类添加方法.

// 通过委托与数据源协议进行帝乡键通信.

对象之间经常需要互相通信,而通信的模式,OC 开发者广泛使用一种名为 '委托模式'的变成来实现对象间的通信,该模式的主旨是: 定义一套接口, 某个对象若想接受另一套对象的委托, 则需要遵从此接口,以便成为其'委托对象',而这'另一个对象'则可以给其委托对象回传一些信息, 也可以在发生事件是通知委托对象.

// 此模式可将数据与业务逻辑解耦, 比方说, 用户界面里有一个显示一系列数据所用的视图, 那么,此试图只应包含显示数据所需逻辑代码, 而不应该决定要显示何种数据以及数据之间如何交互的问题, 视图对象的属性中, 可以包含负责数据与事件处理的对象, 这两种对象分别称为'数据源' 与 '委托'.    // 委托协议名通常是在相关类名后面加上 Delagate 一词,整个类名采用驼峰命名法.以便使用此代码的人理解,    // 有了这个协议之后, 类就可以用一个属性来存放委对象.    // @property (nonatomic, weak) iddelagete 一定要注意,这个属性需要定义成 weak, 而非 strong, 因为两者之间必须是 '非拥有关系'

// 委托协议中的方法一般都是可选的, 因为 扮演 '受委托者' 角色的这个对象未必关心其中所有的方法, 为了指明可选方法,委托协议经常使用 @optional 关键字来标注大部分或全部的方法.

// 如果要在委托对象上调用可选方法, 那么必须提前使用类型信息查询方法 判断这个委托对象能否响应相关选择子.

//    if ([_delegate respondsToSelector:@selector(action:)]) {

//        [_delegate action:sender];

//    }

// 这段代码用 'respondsToSelector' 来判断委托对象是否实现了相关方法, 如果实现了, 就调用, 如果没有实现, 就不执行任何操作, 这样的话, delegate 对象就可以完全按照其需要来实现委托协议的方法, 不用担心因为哪个方法没有实现而导致程序出问题, 即使没有设置委托对象,程序也能正常运行. 因为给 nil 发消息将使得 if 语句的值成为 false.

// 总结:

// 委托模式为对象提供了 一套接口, 使其可由此将相关事件告知其他对象.

// 将委托对象应该支持的接口定义成协议, 在协议中把可能需要处理的时间定义成方法.

// 当某个对象需要从另外一个对象中获取数据时,可以使用委托模式. 这种情境下, 该模式 也可以叫做 '数据源协议'.

// 若有必要. 可实现含有位段的结构体, 将委托对象是否能响应相关协议方法这一信息缓存至其中;

iOS -- Effective Objective-C 阅读笔记 (8)的更多相关文章

  1. iOS Testing with Xcode 阅读笔记

    官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...

  2. Effective Java, 3e阅读笔记一

    引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...

  3. QCon 2015 阅读笔记 - 其他精选主题

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...

  4. QCon 2015 阅读笔记 - 移动开发最佳实践

    所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...

  5. SDL源码阅读笔记(1) 基本模块

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...

  6. 《STL源代码剖析》---stl_deque.h阅读笔记(2)

    看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...

  7. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  8. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  9. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  10. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

随机推荐

  1. H5 基于Web Storage 的客户端留言板

    <!DOCTYPE html> <html> <head> <meta name="author" content="Yeeku ...

  2. How to DUMP the vba code protected by Unviewable+ VBA?

    原始出处:http://www.cnblogs.com/Charltsing/p/unviewable.html QQ: 564955427 Email: charltsing@gmail.com 有 ...

  3. 论PHP框架设计模式及MVC的缺陷

    目前主流的PHP框架设计模式均为MVC模式,比如yii或codeigniter,均是由控制器接收页面请求,并沟通模型与视图的交互.如果我们把网站整体看作一个矩阵,把网站接收用户请求并处理看作是网站的竖 ...

  4. Oracle的表被锁后的恢复

    运行下列SQL,找出数据库的serial#,执行结果如下图所示 SELECT T2.USERNAME, T2.SID, T2.SERIAL#, T2.LOGON_TIME   FROM V$LOCKE ...

  5. uni-app 引入ecart

    https://blog.csdn.net/CherryLee_1210/article/details/83016706(copy) 1.首先在uni-app中不支持包下载所以得自己先新建一个项目, ...

  6. java学习之—实现一个简单的ArrayList

    package thread1; /** * 实现一个简单的ArrayList * * @Title: uminton */ public class SimpleArrayList<T> ...

  7. [SimplePlayer] 4. 从视频文件中提取音频

    提取音频,具体点来说就是提取音频帧.提取方法与从视频文件中提取图像的方法基本一样,这里仅列出其中的不同点: 1. 由于目的提取音频,因此在demux的时候需要指定的是提取audio stream Au ...

  8. 【XSY2666】排列问题 DP 容斥原理 分治FFT

    题目大意 有\(n\)种颜色的球,第\(i\)种有\(a_i\)个.设\(m=\sum a_i\).你要把这\(m\)个小球排成一排.有\(q\)个询问,每次给你一个\(x\),问你有多少种方案使得相 ...

  9. Ubuntu16.04 安装g++6

    https://blog.csdn.net/qq_34877350/article/details/81182022 1.安装gcc-6: sudo apt-get update && ...

  10. SpringCloud笔记一:扫盲

    目录 前言 什么是微服务? 微服务的优缺点是什么? 微服务之间是如何通讯的? SpringCloud和Dubbo有哪些区别? SpringCloud和SpringBoot的关系? 什么是服务熔断?什么 ...