我正在使用 xCode 4.2,正在阅读“Programming in Objective C 2.0”这本书
有一个练习涉及从 NSObject
类实现 isEqual:
方法。
书上说isEqual:
方法是在调用NSArray
类的removeObjectIdenticalTo:
方法时触发的。 removeObjectIdenticalTo:
最终向所有数组成员发送 isEqual:
消息。
当我尝试在我的类 AddressCard
中实现此 isEqual:
方法时,我使用 removeObjectIdenticalTo:
,传递一个对象是 AddressCard
类的一个实例,但是,我的 isEqual:
方法没有被调用。尽管如果我只是在 AddressCard
的实例上显式使用 isEqual:
方法,它确实有效。
这是我在 AddressCard.m 文件中的 isEqual:
方法
-(BOOL)isEqual: (id)object {
NSLog(@"I got called");
return NO;
}
当这段代码在 AddressBook.m 中触发时
-(void) removeCard: (AddressCard *) theCard {
[book removeObjectIdenticalTo: theCard];
}
上面列出的isEqual:
方法没有被调用。
我觉得我遗漏了一些重要的东西,但根据我所读和所知,我认为必须调用 isEqual:
,除非 removeObjectIdenticalTo:
不涉及了。
我也在 .h 文件中定义了所有相应的方法。
最佳答案
如您所料,removeObjectIdenticalTo:
不会调用 isEqual:
,因为它只是使用对象地址来检查相等性。
但是 removeObject:
会调用 isEqual:
,因此您很可能需要它。
关于objective-c - 重写等于 : method but it is not called when removing object from array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628525/