美文网首页
iOS 数组深复制 NSMutableCopy

iOS 数组深复制 NSMutableCopy

作者: LV大树 | 来源:发表于2021-07-16 19:50 被阅读0次

实现模型数组深拷贝的方法
1、最笨的方法就是通过遍历逐个拷贝元素

NSMutableArray *array = [NSMutableArray array];
for (Person *person in dataSourceAry) {
    [array addObject:[person copy]];
}

2、也有人使用归档解档实现数组内部元素拷贝

3、这么好用的一个方法现在才发现(推荐)

- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag 

这里是系统提供的方法,使用时,需要ObjectType实现NSCopying

NSArray <Person *>*deepCopyAry = [[NSArray alloc]initWithArray:dataSourceAry copyItems:YES];
NSLog(@"<dataSourceAry: %@>", dataSourceAry);
NSLog(@"<deepCopyAry: %@>", deepCopyAry);
    
[deepCopyAry enumerateObjectsUsingBlock:^(Person *obj, NSUInteger idx, BOOL * _Nonnull stop) {
    obj.name = @"弗兰克";
    obj.dog.name = @"弗兰克的dog";
}];

NSLog(@"dataSourceAry[0].name = %@", dataSourceAry[0].name);
NSLog(@"deepCopyAry[0].name = %@", deepCopyAry[0].name);
    
NSLog(@"dataSourceAry[0].dog.name = %@", dataSourceAry[0].dog.name);
NSLog(@"deepCopyAry[0].dog.name = %@", deepCopyAry[0].dog.name);
    

工程实践:


@interface JJSOrderType : NSObject<NSMutableCopying,NSCopying>

@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger value;
@property (nonatomic, assign) BOOL bisSelected;

@end


@implementation JJSOrderType
-(id)copyWithZone:(NSZone *)zone{
    JJSOrderType *model = [JJSOrderType allocWithZone:zone];
    model.name = [_name copy];
    model.value = _value;
    model.bisSelected = _bisSelected;
    return model;
}
-(id)mutableCopyWithZone:(NSZone *)zone{
    JJSOrderType *model = [JJSOrderType allocWithZone:zone];
    model.name = [_name mutableCopy];
    model.value = _value;
    model.bisSelected = _bisSelected;
    return model;
}

调用:


                self.sortTypeArray = [NSMutableArray arrayWithArray: [JJSOrderType mj_objectArrayWithKeyValuesArray:dict]] ;
                 
                SearchDiscoverListViewController *left_allVC = self.controllers[0];
//                left_allVC.sortTypeArray = [self.sortTypeArray mutableCopy];
                left_allVC.sortTypeArray = [NSMutableArray array];// [self.bigCategoryCourseArray mutableCopy];
                for (JJSOrderType *model in self.sortTypeArray) {
                    [left_allVC.sortTypeArray addObject:[model mutableCopy]];
                }
                
                NSArray  *deepCopyAry = [[NSArray alloc]initWithArray:self.sortTypeArray copyItems:YES];
                NSLog(@"<dataSourceAry: %@>", self.sortTypeArray);
                NSLog(@"<deepCopyAry: %@>", deepCopyAry);
                    

相关文章

  • iOS 数组深复制 NSMutableCopy

    实现模型数组深拷贝的方法1、最笨的方法就是通过遍历逐个拷贝元素 2、也有人使用归档解档实现数组内部元素拷贝 3、这...

  • 浅析iOS的浅复制与深复制

    原文:浅析iOS的浅复制与深复制 最近同事问我一个问题:原数组A,进行复制得到数组B,改变数组B的Person元素...

  • 深浅复制

    参考链接 iOS 集合的深复制与浅复制

  • javascript 数组以及对象的深拷贝

    数组的深拷贝在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝。如下图演示: for 循环实现数组的深...

  • iOS中的浅拷贝和深拷贝

    拷贝协议 在iOS开发中,只有实现了NSCopying | NSMutableCopy协议的对象才支持copy |...

  • OC属性常用关键字

    含义: copy 复制内容(深复制),如果调用copy的是数组,则为指针复制(浅复制),仅仅复制子元素的指针。 @...

  • 深复制与浅复制

    概念: 浅复制与深复制都是只针对对象,数组,这些复杂类型。 浅复制指的是复制一个对象的一层属性,如果对象,数组内嵌...

  • iOS 深复制浅复制

    深浅拷贝相信对于大多数iOS开发者而言并不陌生,写这篇文章的目的是在公司项目的开发中遇到的一个可变数组赋值问题所以...

  • iOS 集合的深复制与浅复制

    iOS 集合的深复制与浅复制 概念 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是...

  • iOS内存管理关键字

    ARC 关键字 copy复制内容(深复制),如果调用copy的是数组,则为指针复制(浅复制),仅仅复制子元素的指针...

网友评论

      本文标题:iOS 数组深复制 NSMutableCopy

      本文链接:https://www.haomeiwen.com/subject/ftnbpltx.html