1

为了简单起见,我正在聊天:

我有一个包含消息的 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: 如何与对象不同时相同。

我做错了什么?

谢谢

4

0 回答 0