为了简单起见,我正在聊天:
我有一个包含消息的 NSArray,因此我创建了一个 Message 类。每次我收到一个 Message 对象时,我都会将它添加到 NSArray 中。
我现在有一个看起来像这样的 NSArray:
(
"<Message: 0xa8839c0>",
"<Message: 0x15908480>",
"<Message: 0x159c6e20>",
"<Message: 0xa8cb530>",
"<Message: 0x1593a680>",
"<Message: 0x956ff50>",
"<Message: 0x1885f130>",
"<Message: 0x18121db0>"
)
正如你所看到的,我所有的对象都是不同的。
现在,如果我这样做:
for (Message *message in self.messages) {
NSNumber *idx = [NSNumber numberWithInteger:[self.messages indexOfObject:message]];
NSLog(@"%@ : %@ : %@", idx, message, message.message);
}
我得到:
(
1 : "<Message: 0xa8839c0>" : my message 1,
2 : "<Message: 0x15908480>" : my message 2,
3 : "<Message: 0x159c6e20>" : my message 3,
4 : "<Message: 0xa8cb530>" : my message 4,
5 : "<Message: 0x1593a680>" : my message 5,
5 : "<Message: 0x956ff50>" : my message 6,
5 : "<Message: 0x1885f130>" : my message 7,
5 : "<Message: 0x18121db0>" : my message 8
)
第 4 行和第 5 行之间发生了什么:我很清楚,又回到了聊天中。但问题是 NSArray 中的对象是不同的!
indexOfObject: 的描述是:
返回其对应数组值等于给定对象的最低索引。
从索引 0 开始,向数组的每个元素发送一个 isEqual: 消息,直到找到匹配项或到达数组末尾。此方法将 anObject 参数传递给每个 isEqual: 消息。如果 isEqual:(在 NSObject 协议中声明)返回 YES,则认为对象相等。
我不明白 indexOfObject: 如何与对象不同时相同。
我做错了什么?
谢谢