NSMutableArray具有相同的参考

RJR*_*RJR 1 iphone objective-c ios

面对使用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]);
Run Code Online (Sandbox Code Playgroud)

结果

ArrayTest [2356:c07] bookSet1 == bookSet2 0 ArrayTest [2356:c07]集合数== 0

检查它们是否具有相同的引用但是equals方法返回false,因此它们肯定不指向相同的内存位置.不知道为什么这样的行为.任何可能的解决方案来克服这个

小智 9

检查它们是否具有相同的引用但是equals方法返回false

罗.您没有使用检查相等性isEqual.如果你曾经使用过isEqual:,你就会得到1(即YES).

NSMutableArray(以及所有基本的Cocoa集合类)用于isEqual:确定两个对象是否相同.这个方法可以被覆盖,如果它们的内容在概念上被认为是相同的,它通常用于使对象比较相等,不仅如果它们的内存地址相同(如果后者是真的,我们也无法比较字符串或像它们这样的任何对象安全地,例如).

你真的不能克服,因为这是预期和概念上的权利的行为removeObject:.如果由于某种原因,你不能使用它,你总是可以使用这个removeObjectIdenticalTo:方法,它使用内存地址进行比较(这里的文档).