NSData initWithContentsOfURL: не возвращает исходное распределение? - PullRequest
2 голосов
/ 24 мая 2011

В документации из NSData initWithContentsOfURL: написано:

Возвращаемый объект может отличаться от исходного получателя.

Каковы последствия этого? Кажется, подразумевается, что стандартная строка «alloc / init» может привести к утечке памяти.

1 Ответ

4 голосов
/ 24 мая 2011

Есть несколько причин, по которым кластеры классов являются наиболее общеизвестными:

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

при использовании этой формы не возникает утечек.

это просто означает, что вы должны использовать только результатвызова alloc + init (вместо того, чтобы удерживать результат alloc), что является хорошей идеей в любом случае - даже если это явно не задокументировано.

...