4

例:NSStringにいくつかのオブジェクトを追加しますNSMutableArray: @"Foo", @"Bar", @“FooBar"。今、別の場所でその配列に再びアクセスし、削除したいと思い@"Foo"ます。そこで、新しい を作成してNSString @"Foo"に渡し-removeObject:ます。ドキュメントには、どの基準が機能するかについては記載されていません-removeObject。メモリアドレスだけを探していると思うので、この場合は何もしません。あれは正しいですか?

4

2 に答える 2

9

removeObject のドキュメントによると、「一致は isEqual: メッセージに対するオブジェクトの応答に基づいて決定されます」、文字列はハッシュと比較されます (「2 つのオブジェクトが等しい場合、それらは同じハッシュ値を持つ必要があります」)。 、それは正しくないはずです。

于 2009-08-21T09:10:12.693 に答える
2

あなたの例は残念なものです - 文字列リテラル @"Foo" をコードの 2 か所で使用すると、コンパイラはそれらに同じアドレスを与えます (つまり、文字列の同じ静的インスタンスを使用します)。例:

heimdall:Documents 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:Documents leeg$ ./foostrings

文字列 1: 0x100001048

文字列 2: 0x100001048

于 2009-08-21T13:40:46.403 に答える