NSCopying简析

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    = @(28);

    // 对象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

简单的分析:

时间: 2024-12-01 14:33:48

NSCopying简析的相关文章

Rails系统中的AJAX开发技术简析(2)

ajax|rails 五. 使用link_to_remote Rails有若干帮助者方法以在你的视图的模板中实现Ajax.一种最简单且很通用的方法就是link_to_remote().让我们考察一个简单的web页面-它实现询问时间并且有一个链接,用户可以点击这个链接来获得当前的时间.该应用程序经由link_to_remote()使用Ajax以检索时间并且显示它于web页面. 我的视图模板(index.rhtml)看起来象: <html><head><title>Ajax

Rails系统中的AJAX开发技术简析(3)

ajax|rails 六. 使用form_remote_tag 这个form_remote_tag()帮助函数与link_to_remote()很相似,除了它也发送一个HTML表单的内容之外.这意味着该行动处理器可以使用用户输入的数据来形成响应.这个实例显示了一个web页面-它有一个列表和一个支持Ajax的表单-该表单能够让用户添加一些选项到该列表中. 我的视图模板(index.rhtml)看上去象: <html><head><title>Ajax List Demo&

简析JAVA的XML编程

xml|编程  个人认为这篇文章通俗易懂,值得推荐.    XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列.Oracle系列.Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 .由于笔者所从事的电子政务开发较早的引入了XML,所以尝到了许多甜头,在许多项目中利用XML数据交换信息,省去了许多麻烦事,不用制定繁锁的数据格式,利用XML数据易于表达,也利于一线开发者跟踪调试.         笔者先前也曾发表过相关的

ORA-12913: 错误简析,及处理心得

错误|心得                                    ORA-12913: 错误简析,及处理心得     事先声明,因为工作变动,偶有整一年没有摸过ORACLE了,呵呵    昨天晚上装完ORACLE后,准备创建属于自己的表空间的时候,出现了ORA-12913: 无法创建字典管理的表空前. 当然了,故障排除很简单,找到文档,看一眼就排除了. 但既然在ORACLE9I之后,系统缺省安装时为本地管理表空间(Local Managed Tablespace)LMT,好处多多

ug建模以后有限元分析的步骤简析

  ug建模以后有限元分析的步骤简析.许多正在学习ug这个软件的网友最近都在议论一个问题,那就是:ug怎么进行有限元分析.要解决这个问题,我们需要先来了解一下什么是ug有限元分析.而网上关于ug有限元分析的教程还是挺多的,但是,小编总结了一下规律之后发现,ug有限元分析的步骤基本上离不开8个步骤,下面,就一起来看看今天的ug建模以后有限元分析的步骤简析! ug有限元分析 推荐:ug4.0软件下载 什么是ug有限元分析? 有限元分析(FEA,Finite Element Analysis)利用数学

实例简析SQL嵌套子查询

  实例简析SQL嵌套子查询: 一些初级程序员常常对SQL语法中的子查询,由其对嵌套子查询(子查询中包含一个子查询)的使用比较生疏,本文就此做一个基本讲解,相信新手会有一定收获. 使用子查询的原则 1.一个子查询必须放在圆括号中. 2.将子查询放在比较条件的右边以增加可读性. 子查询不包含 ORDER BY 子句.对一个 SELECT 语句只能用一个 ORDER BY 子句, 并且如果指定了它就必须放在主 SELECT 语句的最后. ORDER BY 子句可以使用,并且在进行 Top-N 分析时

从底层简析Python程序的执行过程

  这篇文章主要介绍了从底层简析Python程序的执行过程,包括注入操作码和封装程序等解释器执行层面的知识,需要的朋友可以参考下 最近我在学习 Python 的运行模型.我对 Python 的一些内部机制很是好奇,比如 Python 是怎么实现类似 YIELDVALUE.YIELDFROM 这样的操作码的;对于 递推式构造列表(List Comprehensions).生成器表达式(generator expressions)以及其他一些有趣的 Python 特性是怎么编译的;从字节码的层面来看

浅谈跨网站脚本攻击(XSS)的手段与防范(简析新浪微博XSS攻击事件)

本文主要涉及内容: 什么是XSS XSS攻击手段和目的 XSS的防范 新浪微博攻击事件 什么是XSS 跨网站脚本(Cross-sitescripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响.这类攻击通常包含了HTML以及用户端脚本语言. XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序.这些恶

《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

2.1 简析Android安装文件 Android 网络开发与应用实战详解 当我们下载并安装Android后,会在其安装目录中看到一些安装文件.这些文件具体是干什么用的,了解这些对学习后面的开发知识十分有用.所以在本节的内容中将简要介绍这些安装文件的基本知识. 2.1.1 Android SDK目录结构 安装Android SDK后,其安装目录的具体结构如图2-1所示. temp:里面包含了一些常用的文件模板. tools:包含了一些通用的工具文件. usb_driver:包含了AMD64和X8