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