zoukankan      html  css  js  c++  java
  • 黑马程序员——OC学习笔记—— Copy

     

    黑马程序员——OC学习笔记—— Copy

    copy 即对象拷贝

    要使用对象数据而不希望修改对象时,可以使用copy

    copy叫做浅拷贝  mutablecopy深拷贝

    copy需要遵守NSCopying协议,实现CopywithZone方法

    MutableCopy也一样要遵守相应协议

    注意:

    OC中copy复制的对象都是不可变的  mutablecopy复制的是可变副本  

    浅拷贝:只拷贝地址,不拷贝空间 是同一个对象,源对象和副本对象引用计数加1,相当于retain一次,所以在手动管理内存是要注意release一次

    深拷贝:开辟新的空间存储副本对象,源对象的引用计数不变,副本对象引用计数都为1;

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
           
            Dog *d=[Dog new];
            d.age=20;
            d.tel=4100;
            Dog *d2=[d copy];
            NSLog(@"%d %d",d2.age,d2.tel);
     
            NSString *str=@"abc";
            NSMutableString *str2=[str mutableCopy];
            [str2 appendString:@"xxxxx"];
            NSLog(@"str2=%@",str2);
        }
        return 0;
    }
    

      

    实现Copying协议 重写方法

    - (id)copyWithZone:(NSZone *)zone

    @implementation Dog
    - (id)copyWithZone:(NSZone *)zone{
    
        //为了让创建的两个对象copy使用不同的空间 要重新分配空间
        Dog *d=[[Dog alloc]init];
        
        d.age=self.age;
        d.tel=self.tel;
        
        return d;
        //注意此处不能返回return self不让两个对象用的是一块空间发生改变会影响对方
        
    
    }
    @end
    

      

  • 相关阅读:
    MyBaits基本要素
    自定义MVC
    mybatis之多个对象自动装配问题
    idea之映射servlet问题
    idea工程jdk设置问题
    初识多线程之基础知识与常用方法
    多线程之模拟数据库连接
    mybatis配置文件详解
    初识mybatis之入门案例
    mybatis中打印sql语句
  • 原文地址:https://www.cnblogs.com/zijie/p/4929812.html
Copyright © 2011-2022 走看看