3

以下のコードスニペットを理解するのに助けが必要です。具体的には、を呼び出すcopyときにキーワードが使用される理由を知りたいです。methodBmethodA

+ (NSString*) methodA {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, 
                                                         NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

+ (NSString*) methodB:(NSString*)stringToAppend {

    static NSString *s = nil;
    if(!s) s = [[self methodA] copy];

    return [s stringByAppendingString:stringToAppend];
}

補足:明らかに、クラスメソッドはを使用して他のクラスメソッドを呼び出すことができますself(インスタンスメソッドはこのようなクラスメソッドを呼び出す必要があります)[ClassName classMethodName];

4

2 に答える 2

2

methodAから返されたNSStringが実際にNSMutableStringである場合、MethodBはcopyを呼び出します。

コピーはセキュリティのためだけにあります。使用中は、その文字列の内容が何も変更されていないことを知っているので、安心できます。

これは、オブジェクトを変更したくないときに変更可能である可能性のあるオブジェクトを処理するための一般的な手法です。

于 2011-08-05T17:40:28.067 に答える
0

paths[0]ですか?あなたが意味していると仮定すると[paths objectAtIndex: 0]、少なくともそれを自動リリースする必要があります。その後、でコピーすることができますmethodB:

返される文字列methodB:はすでに自動解放されているので、問題ありません。

于 2011-08-05T17:40:25.853 に答える