• 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

    简单的分析:

  • 相关阅读:
    高性能TcpServer(Java)
    高性能TcpServer(C#)
    高性能TcpServer(C#)
    高性能TcpServer(C#)
    高性能TcpServer(C#)
    高性能TcpServer(C#)
    高性能TcpServer(C#)
    MySQL连表Update修改数据
    windows服务器安装安全狗时服务名如何填写
    织梦ckeditor编辑器 通过修改js去除img标签内的width和height样式
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4472452.html
Copyright © 2020-2023  润新知