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

简单的分析:

目录
相关文章
|
存储 前端开发 JavaScript
AntV X6源码探究简析
AntV是蚂蚁金服全新一代数据可视化解决方案,其中X6主要用于解决图编辑领域相关的解决方案,其是一款图编辑引擎,内置了一下编辑器所需的功能及组件等,本文旨在通过简要分析x6源码来对图编辑领域的一些底层引擎进行一个大致了解,同时也为团队中需要进行基于X6编辑引擎进行构建的图编辑器提供一些侧面了解,在碰到问题时可以较快的找到问题点。
378 0
|
5月前
|
数据库 对象存储
状态机的原理简析及重要用途
状态机的原理简析及重要用途
76 1
|
5月前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
JSON 前端开发 数据可视化
umi3源码探究简析
作为蚂蚁金服整个生态圈最为核心的部分,umi可谓是王冠上的红宝石,因而个人认为对于整个umi架构内核的学习及设计哲学的理解,可能比如何使用要来的更为重要;作为一个使用者,希望能从各位大佬的源码中汲取一些养分以及获得一些灵感
229 0
|
数据挖掘 Perl
Mummer 用法简析
Mummer 用法简析
128 0
|
网络架构
花生壳6.5工程版原理简析
花生壳6.5工程版原理简析
305 0
|
存储 NoSQL 安全
讲透单点登录原理与简单实现
讲透单点登录原理与简单实现
246 0
讲透单点登录原理与简单实现
|
消息中间件 存储 JavaScript
一文详解 JsBridge 实现原理
JsBridge主要用于“JS与Native的通信”,众所周知Android 4.2以下的WebView存在addJavascriptInterface漏洞的问题,为解决这一问题国内很多知名大厂很早就在各自项目中集成了JsBridge。
1026 0
一文详解 JsBridge 实现原理