4

示例:我将一些NSString对象添加到NSMutableArray: @"Foo", @"Bar", @“FooBar". 现在在其他地方我再次访问该数组,我想删除@"Foo". 所以我创建了一个新的NSString @"Foo",并将其传递给-removeObject:. 该文档没有说明哪些标准-removeObject有效。我认为它只查找内存地址,所以在这种情况下它什么也不做。那是对的吗?

4

2 回答 2

9

根据removeObject的文档:“匹配是根据对象对isEqual的响应确定的:消息”并将字符串与散列进行比较(“如果两个对象相等,则它们必须具有相同的散列值”)所以,是,这应该是不正确的。

于 2009-08-21T09:10:12.693 回答
2

您的示例是一个不幸的示例 - 如果您在代码中的两个位置使用字符串文字 @"Foo",编译器将为它们提供相同的地址(即,它使用字符串的相同静态实例)。例子:

heimdall:文件 leeg$ cat foostrings.m

#import <Foundation/Foundation.h>

int main(int argc, char **argv)
{
    NSString *string1 = @"Foo";
    NSString *string2 = @"Foo";
    printf("string1: %p\nstring2: %p\n", string1, string2);
    return 0;
}

heimdall:文件 leeg$ ./foostrings

字符串1:0x100001048

字符串2:0x100001048

于 2009-08-21T13:40:46.403 回答