zoukankan      html  css  js  c++  java
  • 浅拷贝,深拷贝---ios

    #import <Foundation/Foundation.h>
    
    @interface Father : NSObject <NSCopying,NSMutableCopying>
    @property (nonatomic,copy) NSString *name;
    @property (nonatomic,retain) NSNumber *age;
    -(id) initWithName:(NSString *)name withAge:(NSNumber *) age;
    @end
    
    #import "Father.h"
    #import "Child.h"
    
    @implementation Father
    
    -(id) initWithName:(NSString *)name withAge:(NSNumber *) age{
        self=[super init];
        if(self!=nil){
            _name=name;
            _age=age;
        }
        return self;
    }
    //浅拷贝
    -(id) copyWithZone:(NSZone *)zone{
        Father *father=[[[self class] allocWithZone:zone] init];
        father.name=_name;
        father.age=_age;
        return father;
    }
    
    //深拷贝
    - (id)mutableCopyWithZone:(NSZone *)zone{
        Father *father=[[[self class] allocWithZone:zone] init];
        father.name=[_name mutableCopy];
        father.age=[_age copy];
        return self;
    }
    
     NSLog(@"-------自定义对象浅拷贝---------");
            //浅拷贝学习
            Father *father=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:23]];
            Father *father2=[father copy];
            NSLog(@"对象地址:%p",father);
            NSLog(@"对象地址:%p",father2);
            NSLog(@"对象属性地址name:%p",[father name]);
            NSLog(@"对象属性地址name:%p",[father2 name]);
            NSLog(@"对象属性地址age:%p",[father age]);
            NSLog(@"对象属性地址age:%p",[father2 age]);
            
             NSLog(@"--------自定义对象深拷贝---------");
            //深拷贝
            Father *father4=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:25]];
            Father *father3=[father4 mutableCopy];
            NSLog(@"对象地址:%p",father4);
            NSLog(@"对象地址:%p",father3);
            NSLog(@"对象属性地址name:%p",[father4 name]);
            NSLog(@"对象属性地址name:%p",[father3 name]);
            NSLog(@"对象属性地址age:%p",[father4 age]);
            NSLog(@"对象属性地址age:%p",[father3 age]);
            
            NSLog(@"-------浅拷贝---------");
            NSArray *array1=[[NSArray alloc] initWithObjects:@"sdf", nil];
            NSArray *array2=[array1 copy];
            NSLog(@"%p",array1);
            NSLog(@"%p",array2);
            
            NSLog(@"-------深拷贝---------");
            NSMutableArray *mutableArray=[NSMutableArray arrayWithObject:@"sdfdf" ];
            NSMutableArray *mutableArray2=[mutableArray mutableCopy];
            NSLog(@"%p",mutableArray);
            NSLog(@"%p",mutableArray2);
            //总结:当copy一个不可变对象时,相当有retain,即引用记数加一,其他情况copy,mutablecopy都会分配空间复制内容
    
  • 相关阅读:
    Linux Shell脚本编程基础
    UBoot常用命令及内核下载与引导
    经典C面试真题精讲
    文本相似度分析(基于jieba和gensim)
    python中lambda,map,reduce,filter,zip函数
    机器学习-——损失函数
    Tensorflow中的数据对象Dataset
    github 相关操作知识
    机器学习——LightGBM
    机器学习——超参数搜索
  • 原文地址:https://www.cnblogs.com/clarence/p/3920944.html
Copyright © 2011-2022 走看看