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

简单的分析:

目录
相关文章
|
7月前
|
数据建模 程序员
程序员必知:ZVS振荡电路工作原理分析
程序员必知:ZVS振荡电路工作原理分析
83 1
|
7月前
|
存储 数据可视化 API
一篇文章讲明白ffdshow源代码分析
一篇文章讲明白ffdshow源代码分析
72 0
|
8月前
|
消息中间件 开发框架 安全
中间件简析
中间件简析
150 0
|
Java 数据安全/隐私保护
【面试题精讲】何谓反射?
【面试题精讲】何谓反射?
|
JSON 前端开发 数据可视化
umi3源码探究简析
作为蚂蚁金服整个生态圈最为核心的部分,umi可谓是王冠上的红宝石,因而个人认为对于整个umi架构内核的学习及设计哲学的理解,可能比如何使用要来的更为重要;作为一个使用者,希望能从各位大佬的源码中汲取一些养分以及获得一些灵感
246 0
|
数据挖掘 Perl
Mummer 用法简析
Mummer 用法简析
156 0
|
监控 Java 应用服务中间件
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(上)
当一个 HTTP 请求到达 Tomcat,Tomcat 将会从线程池中取出线程,然后按照如下流程处理请求: 将请求信息解析为 HttpServletRequest 分发到具体 Servlet 处理相应的业务 通过 HttpServletResponse 将响应结果返回给等待客户端
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(上)
|
Java 应用服务中间件 程序员
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(下)
当一个 HTTP 请求到达 Tomcat,Tomcat 将会从线程池中取出线程,然后按照如下流程处理请求: 将请求信息解析为 HttpServletRequest 分发到具体 Servlet 处理相应的业务 通过 HttpServletResponse 将响应结果返回给等待客户端
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(下)
|
XML Java 数据格式
【Spring注解驱动开发】面试官再问你BeanPostProcessor的执行流程,就把这篇文章甩给他!
在前面的文章中,我们讲述了BeanPostProcessor的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法在bean初始化的前后调用,我们可以自定义类来实现BeanPostProcessor接口,并在postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法中指定我们自定义的逻辑。今天,我们来一起探讨下eanPostProcessor底层原理。
458 0
【Spring注解驱动开发】面试官再问你BeanPostProcessor的执行流程,就把这篇文章甩给他!
|
iOS开发
iOS多线程编程之二——NSOperation与NSOperationQueue(二)
iOS多线程编程之二——NSOperation与NSOperationQueue
142 0

热门文章

最新文章