我考虑过的一种方法是创建一个临时数组并将NSNumbers
数组加载到其中,然后分配可变数组,然后如果加载的数组不是nil或空addObject:[NSNumber numberWithInt:[[temparr objectAtIndex:i] intValue]],
但似乎如此迂回的做法。
这样我就可以修改应用中的数字和数组内容。
是否有更短,更直接的方法来做同样的事情?从某个地方加载数组/ dicts只是为了找到它们的内容是不可变的,这是很常见的,我想学习最简单的方法。
答案 0 :(得分:1)
你不能使NSNumber
个对象变得可变,它们是设计上的不可变对象。
如果要创建数组的可变深层副本,即数组的可变副本及其内容的可变副本(如果可能;例如,在NSNumber
s的情况下不能),你可以做这样的事情:
@interface NSArray (MutableCopyDeep)
- (NSMutableArray *) mutableCopyDeep;
@end
@implementation NSArray (MutableCopyDeep)
- (NSMutableArray *) mutableCopyDeep {
NSMutableArray *returnAry = [[NSMutableArray alloc] initWithCapacity:[self count]];
for (id anObject in self) {
id aCopy = nil;
if ([anObject respondsToSelector:@selector(mutableCopyDeep)]) {
aCopy = [anObject mutableCopyDeep];
} else if ([anObject respondsToSelector:@selector(mutableCopyWithZone:)]) {
aCopy = [anObject mutableCopy];
} else if([anObject respondsToSelector:@selector(copyWithZone:)]) {
aCopy = [anObject copy];
} else {
aCopy = [anObject retain];
}
[returnAry addObject:aCopy];
[aCopy release];
}
// Method name prefixed with "mutableCopy" indicates that the returned
// object is owned by the caller as per the Memory Management Rules.
return returnAry;
}
@end
答案 1 :(得分:0)
您不能将NSNumbers放在可变数组中,并希望能够更改其值。有关我使用的解决方法,请参阅问题中的代码。