2

ドキュメントでは、次NSDatainitWithContentsOfURL:ように述べています。

返されるオブジェクトは、元のレシーバーとは異なる場合があります。

その意味は何ですか?標準の「alloc/init」行がメモリをリークする可能性があることを意味しているようです。

4

1 に答える 1

4

いくつかの理由があります-クラスクラスターが最も公に認識されています:

- (id)initWithContentsOfURL:(NSURL *)url
{
    self = [super init];
    if (self != nil) {
        NSData * result =
           [[NSDataClassClusterSpecialization alloc] initWithContentsOfURL:url];
        [self release];
        return result;
    }
    return self;
}

このフォームを使用してもリークは発生しません。

これは、 (の結果を保持するのではなく) alloc+呼び出しの結果のみを使用する必要があることを意味します。これは、明示的に文書化されていない場合でも、どのような場合でも良い考えです。initalloc

于 2011-05-23T21:30:51.357 に答える