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