zoukankan      html  css  js  c++  java
  • 浅拷贝和深拷贝

    浅拷贝和深拷贝

     

    目录

    • 对浅拷贝和深拷贝的理解
    • 浅拷贝
    • 深拷贝
    • NSDictionary的深拷贝

     

     对浅拷贝和深拷贝的理解

     

    浅拷贝

    不是深拷贝的拷贝都是浅拷贝

     

    深拷贝

    如果想使用copy则需要遵循NSCopying协议,如果是想使用mutableCopy则需要遵循NSMutableCopying协议

    分别需要实现的方法

    - (id)copyWithZone:(NSZone *)zone{ MyClass *myClass = [[self class] allocWithZone:zone] init]; 对新创建的对象进行copy/mutableCopy赋值; return myClass;}

    - (id)mutableCopyWithZone:(NSZone *)zone{ MyClass *myClass = [[self class] allocWithZone:zone] init]; 对新创建的对象进行copy/mutableCopy赋值; return myClass;}

    如果类里面又包含其他类对象,则需要对这些类对象的类实现NSCopying协议或者NSMutableCopying协议,如此类推

     

    NSDictionary的深拷贝

    -(NSMutableDictionary *)mutableDeepCopy  

    {  

        NSMutableDictionary *dict=[[NSMutableDictionary alloc] initWithCapacity:[self count]];  

    //新建一个NSMutableDictionary对象,大小为原NSDictionary对象的大小  

    NSArray *keys=[self allKeys];  

    for(id key in keys)  

        { //循环读取复制每一个元素  

            id value=[self objectForKey:key];  

            id copyValue;  

    if ([value respondsToSelector:@selector(mutableDeepCopy)]) {  

    //如果key对应的元素可以响应mutableDeepCopy方法(还是NSDictionary),调用mutableDeepCopy方法复制  

                copyValue=[value mutableDeepCopy];  

            }else if([value respondsToSelector:@selector(mutableCopy)])  

            {  

                copyValue=[value mutableCopy];  

            }  

    if(copyValue==nil)  

    copyValue=[value copy];  

     

    [dict setObject:copyValue forKey:key];  

        }  

    return dict;  

     

     

  • 相关阅读:
    新版vscode配置eslint自动格式化代码
    vue cli4 拿到一个项目后
    windows 网页打不开github网站
    PHP+jQuery-ui拖动浮动层排序并保存到数据库实例
    php+html5兼容手机端的图片选取裁剪上传实例
    PHP+MySQL设计高效发表评论留言功能
    5种PHP生成图片验证码实例
    PHP+jPaginate插件制作无刷新分页实例
    PHP+Mysql实现网站顶和踩投票功能实例
    jQuery+PHP实现购物商城常用的星级评分效果
  • 原文地址:https://www.cnblogs.com/IOS-Developer/p/4173167.html
Copyright © 2011-2022 走看看