使用NSMutableArray.Came解决将空mutableArrays添加到NSMutableArray的要求。当我删除最后一个数组时,之前添加的所有数组也从Parent数组中删除。代码在这里,
NSMutableArray *collections = [[NSMutableArray alloc] init];
NSMutableArray *bookSet1 = [[NSMutableArray alloc] init];
[collections addObject:bookSet1];
NSMutableArray *bookSet2 = [[NSMutableArray alloc] init];
[collections addObject:bookSet2];
NSLog(@"bookSet1==bookSet2 %d", bookSet1==bookSet2);
[collections removeObject:bookSet2];
NSLog(@"Collections count==%d", [collections count]);
结果
ArrayTest [2356:c07] bookSet1 == bookSet2 0 ArrayTest [2356:c07]集合数== 0
检查它们是否具有相同的引用但是equals方法返回false,因此它们肯定不指向相同的内存位置。不知道为什么行为是这样的。任何可能的解决方案来克服这个问题。
答案 0 :(得分:9)
检查它们是否具有相同的引用但是equals方法返回false
罗。您没有使用isEqual
检查相等性。如果您使用过isEqual:
,则会得到1
(即YES
)。
NSMutableArray
(以及所有基本的Cocoa集合类)使用isEqual:
来确定两个对象是否相同。这个方法可以被覆盖,如果它们的内容在概念上被认为是相同的,它通常用于使对象比较相等,不仅如果它们的内存地址相同(如果后者是真的,我们也不能例如,安全地比较字符串或类似它们的任何对象。
您无法真正克服这一点,因为removeObject:
这是 预期和概念上正确的行为。如果出于某种原因,您无法使用它,则可以始终使用removeObjectIdenticalTo:
方法,该方法使用内存地址进行比较(documentation here)。
答案 1 :(得分:0)
removeObject:
匹配是根据对象对isEqual:message的响应确定的。例如,如果对象的内容相同,则视为相同。< / p>
removeObjectIdenticalTo:
匹配是使用对象地址确定的。例如,如果对象的对象地址相同,则认为对象相同。
尝试
[collections removeObjectIdenticalTo:bookSet2];
这将删除您要删除的确切对象,以地址为基础。