zoukankan      html  css  js  c++  java
  • 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

    简单的分析:

  • 相关阅读:
    html5 canvas 像素随机百分之十显示
    html5 canvas防微博旋转
    html5 canvas 旋转扩大
    html5 canvas 钟表
    html5 canvas 移动小方块
    html5 canvas 鼠标绘制
    html5 拖放到购物车
    html5 拖拽
    js_sl 无缝切换
    HDU 2048 神、上帝以及老天爷( 错排 )
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4472452.html
Copyright © 2011-2022 走看看