在写代码进行数组操作的时候遇到的问题:
定义了一个NSMutableArray的数组用来存储NSDictionary的对象,每次存储一个NSDictionary对象时都是重新分配的一块儿内存,插入到数组中的第一个,然后余下的index中遍历数组,若发现有与新插入的NSDictionary对象相同的对象,则删除该对象。删除时使用的是removeObject函数,结果发现,执行一次删除操作,却把要删除的和新插入的两个对象都删除了,明明两个对象时不同的内存地址,小郁闷了会儿。
于是,查了NSMutableArray的sdk,如下:
NSMutableArray的removeObject:(id)anObject方法会根据对象的isEqual:方法遍历整个数组找到与anObject的匹配的所有元素,然后调用removeObjectAtIndex:方法删除所有匹配的元素。
又查了NSDictionary的isEqual:方法,发现NSDictionary本身实现了这个方法,根据dictionary中的key-value值来判断,也就是根据对象的内容而不是内存地址来判等的,我却一直以为只有NSString重写isEqual:方法,想当然了。在NSObject的isEqual:方法描述中发现NSDictionary NSString NSArray NSData方法都实现了这个方法。
原因找到了,写下来谨记。