zoukankan      html  css  js  c++  java
  • iOS设计模式-原型模式

    定义:用原型实例指定创建对象的种类,在运行时抽象子类任何对象都可以按照客户端的意愿被复制。

    注:通俗一点讲就是通过拷贝的方式快速复制该类一个对象

    类型:对象创建

    注:对象的拷贝分为浅拷贝和深拷贝,浅拷贝是指指针拷贝,或者对于有层级的对象拷贝时,有部分层级是浅拷贝(如数组,对数组是深拷贝,但对数组中的对象是浅拷贝,也属于浅拷贝的范畴),深拷贝不光拷贝指针还拷贝在内存中的指向的对象。

    应用场景 

     

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject<NSCopyin,NSMutableCopying>
    @property(nonatomic, copy)NSString *name;
    @property(nonatomic, assign)NSInteger age;
    
    - (id)copyWithZone:(NSZone *)zone;
    - (id)mutableCopyWithZone:(NSZone *)zone;
    
    - (void)copyProperty:(Person *)person;
    
    @end
    #import "Person.h"
    
    @implementation Person
    
    - (void)copyProperty:(Person *)person{
        person.name = _name;
        person.age = _age;
    }
    
    - (id)copyWithZone:(NSZone *)zone{
        Person *person = [[self class] allocWithZone:zone];
        [self copyProperty:person];
        return person;
    }
    
    - (id)mutableCopyWithZone:(NSZone *)zone{
        Person *person = [[self class] allocWithZone:zone];
        [self copyProperty:person];
        return person;
    }
    #import "Person.h"
    
    @interface Programmer : Person
    @property(nonatomic, copy)NSString *skill;
    @end
    #import "Programmer.h"
    
    @implementation Programmer
    
    - (void)copyProperty:(Programmer *)person{
        [super copyProperty:person];
         person.skill = _skill;
    }
    
    - (id)copyWithZone:(NSZone *)zone{
        Programmer *programmer = [[self class] allocWithZone:zone];
        [self copyProperty:programmer];
        return programmer;
    }
    
    - (id)mutableCopyWithZone:(NSZone *)zone{
        Programmer *programmer = [[self class] allocWithZone:zone];
        [self copyProperty:programmer];
        return programmer;
    }
        测试
    Programmer *programmer = [[Programmer alloc]init]; programmer.name = @"Hello world!"; Programmer *programmer1 = programmer; Programmer *programmer2 = [programmer copy]; programmer.name = @"hello iOS!"; NSLog(@"%@ == %@ == %@",programmer.name,programmer1.name,programmer2.name);
    2016-08-08 17:45:35.446 DesignPatternsDemo[7148:779654] hello iOS! == hello iOS! == Hello world!
  • 相关阅读:
    转载Crazybingo的文章: 第三章 创造平台——Quartus II 11.0 套件安装指南
    Can't launch the ModelSim-Altera software
    一种简单的ADV7842调试视频pixel_cnt/line的办法.
    调试ADV7842的点滴 之 hdmi
    沿检测使能,时钟同步化
    global clock network
    捡到篮子里边的都是菜
    (转)时序分析基本公式
    Spring中的AOP(一)
    AOP的概念
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749726.html
Copyright © 2011-2022 走看看