• 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!
  • 相关阅读:
    201771010135 杨蓉庆《面对对象程序设计(java)》第十五周学习总结
    201771010135 杨蓉庆/张燕/杨玲《面对对象程序设计(java)》第十四周学习总结
    201771010135 杨蓉庆/张燕《面对对象程序设计(java)》第十三周学习总结
    团队作业6—复审与事后分析
    团队作业6——Alpha阶段项目复审
    团队作业6——事后分析
    团队作业5——测试与发布(Alpha版本)
    团队作业4-项目汇总
    团队作业4-Day7
    团队作业4-Day6
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749726.html
Copyright © 2020-2023  润新知