gpt4 book ai didi

iphone - 如何为 NSMutableArray 创建单独的实例

转载 作者:行者123 更新时间:2023-11-28 20:20:12 25 4
gpt4 key购买 nike

在我的应用程序中,我需要创建一个 NSMutableArray 的副本。目前我正在使用 mutableCopy 方法。但是当我修改复制的数组时,原始数组也会被修改。请告诉我如何创建一个新副本 NSMutableArray。这是代码

delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
self.mainImagesArray = [[NSMutableArray alloc]initWithArray:[delegate.arrayForCarCaptureImages mutableCopy]];

这里我正在修改

UIImage *filteredImage =[[[[self.mainImagesArray objectAtIndex:i]valueForKey:valueVheck] objectAtIndex:j]  copy];
filteredImage =[filteredImage brightness:(1+sliderValue-0.5)];
[[[self.mainImagesArray objectAtIndex:i]valueForKey:valueVheck]removeObjectAtIndex:j];
[[[self.mainImagesArray objectAtIndex:i] valueForKey:valueVheck]insertObject:filteredImage atIndex:j];

执行后 arrayForCarCaptureImages 也自动修改。

最佳答案

您需要创建一个深拷贝。据我了解,您正在创建 NSMutableArray 本身的副本,而不是复制它的各个元素。

根据我在您编写的代码中看到的内容:

  1. You're abusing the delegation pattern
  2. Your code is not readable. Try passing it along to another developer, I bet you'll get slapped very fast :)

下面是深度复制的经典案例:

NSArray *numbersArr = @[@1,@2,@3];
NSMutableArray *numbersArrCopy = [NSMutableArray array];
for (NSNumber *num in numbersArr) {
[numbersArrCopy addObject:[num copy]];
}

更简单的方法:

NSArray *numbersArr = @[@1,@2,@3];
NSArray *numbersArrCopy = [[NSArray alloc] initWithArray:numbersArr copyItems:YES];

这当然不同于:

NSArray *numbersArr = @[@1,@2,@3];
NSArray *numbersArrCopy = [numbersArr copy];

关于iphone - 如何为 NSMutableArray 创建单独的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com