objective-c - 重写等于 : method but it is not called when removing object from array

标签 objective-c inheritance nsarray foundation nsobject

我正在使用 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/

相关文章:

cocoa - 是否可以使用包含本地化字符串元素并使用 Cocoa Touch 中的正确数字的自定义对象对数组进行排序?

iphone - 在 objective-c 中对负数和正数进行排序

iOS 7 圆形框架按钮

objective-c - 检测 View 中的任何触摸(iPhone SDK)

c++ - 如何在派生对象数组上使用析构函数?

swift - Swift 3 混合协议(protocol)、扩展和类继承的可能错误

ios - 从 2013 年 10 月起无法从 Graph API 获取 "access token"

objective-c - 如何修复 QuickDialog 项目中的这个构建错误?

c++ - using 声明是否应该隐藏继承的虚函数?

objective-c - ios中的二维数组