NSCopying简析

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

源码:

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

控制器源码:

//
// ViewController.m
// NSCopy
//
// Created by YouXianMing on 15/5/2.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ViewController.h"
#import "Model.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 对象1
Model *modelOne = [Model new];
modelOne.name = @"YouXianMing";
modelOne.age = @(); // 对象1的复制
Model *modelCopy = [modelOne copy]; // 打印信息
NSLog(@"%@ %@", modelOne, modelOne.name);
NSLog(@"%@ %@", modelCopy, modelCopy.name); // 数组
NSArray *array = @[modelOne, modelCopy]; // 数组的复制
NSArray *arrayCopy = [[NSArray alloc] initWithArray:array copyItems:YES]; // 打印信息
NSLog(@"%@", array);
NSLog(@"%@", arrayCopy); } @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. 数据库-SQLite简介

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库(轻型数据库). 由于资源占用少.性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android.iPhone都有内置的S ...

  2. Go 程序执行顺序

    在一个 go 程序中通常包含:包.常量.变量.init().main()等元素,如果同时存在多个包,包之间存在依赖关系,每个包中存在多个 init 函数,每个文件中存在多个 init 函数,那么问题来 ...

  3. 使用Xshell和Xftp部署简单的项目

    最近本人偶尔接触到该如何部署项目,朋友要求截图,趁此之际,简单总结一下,以供大家分享,更希望各位大神指点,大家相互学习,有问题的勿喷. 1.使用环境:win 7 + tomcat 7 + MyEcli ...

  4. 笔记三:python乱码深度剖析一

    一:学习内容 python编码转换 python乱码原因深入解析 二:python编码转换 1. Python内部字符串一般都是Unicode编码,代码中字符串的默认编码与代码文件本身的编码是一致的. ...

  5. java课件运行实践

    两数相加 源文件:Addition.java 源代码: // An addition program import javax.swing.JOptionPane;  // import class ...

  6. Firebird shadow

    火鸟数据库的shadow,即实时镜像. 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个. 1.创建shadow的准备:修改Firebird.conf ...

  7. JavaScript部分兼容性函数

    1.getElementsByClassName() function getElementsByClassName(node,classname){ if(node.getElementsByCla ...

  8. google自定义广告系列

    Part1:说明 向网址添加参数以标识引荐流量的广告系列. 通过向在广告系列中使用的目标网址添加广告系列参数,您可以收集这些广告系列整体效果的相关信息,还可以了解广告系列在何处投放时效果更好.例如,您 ...

  9. [LeetCode]Flatten Binary Tree to Linked List题解(二叉树)

    Flatten Binary Tree to Linked List: Given a binary tree, flatten it to a linked list in-place. For e ...

  10. markdown 语法备忘

    markdwon语法, 增加以下CSS代码,可以对markdwon语法产生的文件进行分页操作. <div style="page-break-after:always;"&g ...