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;  

     

     

  • 相关阅读:
    树形DP
    区间DP
    洛谷P1462 通往奥格瑞玛的道路
    缓存--Redis
    Flack--SQLAlchemy
    Flask--WTForms
    Flask框架
    通过反射,获取linkedHashMap的最后一个键值对。对map按照值进行排序。
    Comparable和Comparator的使用
    构造函数,构造代码块,静态函数的执行顺序
  • 原文地址:https://www.cnblogs.com/IOS-Developer/p/4173167.html
Copyright © 2011-2022 走看看