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!
  • 相关阅读:
    C++ handle(句柄类) part2
    C++代理类的使用
    第一个blog
    C++ Handle(句柄) part1
    关于理想团队的构建和对软件流程的理解
    提供就医帮助的安卓APP
    上海地铁游移动APP需求分析
    关于学习了《构建之法》的若干存在疑惑的问题
    安卓APP开发简单实例 结对编程心得
    Vue修改Vue项目运行端口号(CLI2)
  • 原文地址:https://www.cnblogs.com/muzijun/p/5749726.html
Copyright © 2011-2022 走看看