NSCopying简析

用到NSCopying的时候并不多,但还是有必要知道最基本的用途,比方说数组的拷贝操作,需要注意的是,数组的拷贝操作并不是执行了 copy 方法,而是需要执行 initWithArray:copyItems: ,这点需要注意.

源码:

  1. //
  2. // Model.h
  3. // NSCopy
  4. //
  5. // Created by YouXianMing on 15/5/2.
  6. // Copyright (c) 2015年 YouXianMing. All rights reserved.
  7. //
  8.  
  9. #import <Foundation/Foundation.h>
  10.  
  11. @interface Model : NSObject <NSCopying/* 继承NSCopying协议 */>
  12.  
  13. // 对象类型
  14. @property (nonatomic, strong) NSString *name;
  15. @property (nonatomic, strong) NSNumber *age;
  16.  
  17. // 基本数据类型
  18. @property (nonatomic, assign) BOOL isMale;
  19.  
  20. @end
  1. //
  2. // Model.m
  3. // NSCopy
  4. //
  5. // Created by YouXianMing on 15/5/2.
  6. // Copyright (c) 2015年 YouXianMing. All rights reserved.
  7. //
  8.  
  9. #import "Model.h"
  10.  
  11. @implementation Model
  12.  
  13. - (id)copyWithZone:(NSZone *)zone {
  14.  
  15. // 获取拷贝内容
  16. Model *copy = [[[self class] allocWithZone:zone] init];
  17.  
  18. // 基本属性的类型本身实现了copy协议
  19. copy.name = [_name copy];
  20. copy.age = [_age copy];
  21.  
  22. // 常规类型属性仅仅需要赋值即可
  23. copy.isMale = _isMale;
  24.  
  25. return copy;
  26. }
  27.  
  28. @end

控制器源码:

  1. //
  2. // ViewController.m
  3. // NSCopy
  4. //
  5. // Created by YouXianMing on 15/5/2.
  6. // Copyright (c) 2015年 YouXianMing. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import "Model.h"
  11.  
  12. @interface ViewController ()
  13.  
  14. @end
  15.  
  16. @implementation ViewController
  17.  
  18. - (void)viewDidLoad {
  19. [super viewDidLoad];
  20.  
  21. // 对象1
  22. Model *modelOne = [Model new];
  23. modelOne.name = @"YouXianMing";
  24. modelOne.age = @();
  25.  
  26. // 对象1的复制
  27. Model *modelCopy = [modelOne copy];
  28.  
  29. // 打印信息
  30. NSLog(@"%@ %@", modelOne, modelOne.name);
  31. NSLog(@"%@ %@", modelCopy, modelCopy.name);
  32.  
  33. // 数组
  34. NSArray *array = @[modelOne, modelCopy];
  35.  
  36. // 数组的复制
  37. NSArray *arrayCopy = [[NSArray alloc] initWithArray:array copyItems:YES];
  38.  
  39. // 打印信息
  40. NSLog(@"%@", array);
  41. NSLog(@"%@", arrayCopy);
  42.  
  43. }
  44.  
  45. @end

简单的分析:

NSCopying简析的更多相关文章

  1. 简析.NET Core 以及与 .NET Framework的关系

    简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...

  2. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  3. RecycleView + CardView 控件简析

    今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...

  4. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  5. PHP的错误报错级别设置原理简析

    原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...

  6. Android 启动过程简析

    首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...

  7. Android RecycleView + CardView 控件简析

    今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...

  8. Java Annotation 及几个常用开源项目注解原理简析

    PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...

  9. 【ACM/ICPC2013】POJ基础图论题简析(一)

    前言:昨天contest4的惨败经历让我懂得要想在ACM领域拿到好成绩,必须要真正的下苦功夫,不能再浪了!暑假还有一半,还有时间!今天找了POJ的分类题库,做了简单题目类型中的图论专题,还剩下二分图和 ...

随机推荐

  1. 共识算法:Paxos

    两阶段提交 Two-phase Commit(2PC):保证一个事务跨越多个节点时保持 ACID 特性: 两类节点:协调者(Coordinator)和参与者(Participants),协调者只有一个 ...

  2. Nodejs学习笔记(七)—Node.js + Express 构建网站简单示例

    前言 上一篇学习了一些构建网站会用到的一些知识点:https://www.cnblogs.com/flyingeagle/p/9192936.html 这一篇主要结合前面讲到的知识,去构建一个较为完整 ...

  3. C语言理论知识

    C语言-----理论部分   一:软件开发概述1.程序语言的发展:机器语言-->汇编语言-->高级语言.2.软件开发的基本步骤与方法:分析问题,建立数学模型-->确定数据结构和算法- ...

  4. 13.Promise 对象

    Promise 对象 Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其 ...

  5. SQL查询出某字段不等于某值的行(其中有为NULL的字段)

    表1如下:TBD1100   TBD1101   TBD1102------------------------------------------  1001            水果       ...

  6. TortoiseGit用户手册

    3 配置TortoiseGit 3.1 生成公钥 生成SSH安全密钥,提供给GIT版本库管理员以访问Git 版本库,点击桌面上生成的图标 然后执行执行“ssh-keygen”生成自己的公钥: 一路回车 ...

  7. easyUi datagrid鼠标经过提示单元格内容

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. jquery.cellTip.js /** * 扩展两个方法 */ using('datagrid', function() ...

  8. Implementation:Segment Tree 线段树

    早就听人提起过线段树,今天有题搞不出来,讨论上说要用一下线段树,看了下,本质上是空间划分索引,只不过是一维上面的,如果在二维则是四叉树,三维则是八叉树,如果可以动态调整那么跟R-Tree就很相似了,他 ...

  9. php判断是否isPhone、is_weixin

    protected function isPhone(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); //pc请求头信息数组 $pc_arr= ...

  10. 【PyQt5 学习记录】007:改变窗口样式之一

    class MainWindow(QMainWindow): 2 def __init__(self, parent=None): 3 super(MainWindow, self).__init__ ...