Свойство NSURL с атрибутом «copy».Это протекает? - PullRequest
0 голосов
/ 30 марта 2012

Я просто немного очищаю свой код и обнаружил несколько строк в функции, в которых я не уверен, что они вызывают утечки памяти. Буду признателен за любые идеи.

Заранее спасибо!

В следующем коде переменная filepath является NSURL, а имя файла - объектом NSString, определенным как свойства. Атрибут определения имеет значение «копировать». Вот код:

-(BOOL)isEqual:(id)object
{
    if ( self == object)
        return YES;

    if (!object || ![object isKindOfClass:[self class]]) 
        return NO;

    if ( ![[[self filepath] path] isEqual:[[object filepath] path]])
        return NO;

    if (![[self filename] isEqualToString:[object filename]])
        return NO;

    if (![[self filesize] isEqualToString:[object filesize]])
        return NO;

    if (![[[self filepath ] absoluteURL] isEqual:[[object filepath] absoluteURL]])
        return NO;

    if ( !([[[self filepath ] absoluteURL ] isFileURL ] && [[[object filepath] absoluteURL ] isFileURL ]))
        return NO;

    return YES;
}

Насколько я понимаю, свойство с атрибутом копирования вернуло бы объект с счетом сохранения +1. Это означало бы, что у меня должны быть утечки памяти при каждом операторе if. Это правильно?

1 Ответ

2 голосов
/ 30 марта 2012

Ничего в вашем фрагменте кода не указывает на утечку.

Атрибут copy означает, что вы сохраняете копию объекта со счетом сохранения один , когда устанавливаете свойство . Вы не можете утечь его, просто ссылаясь на него в своем коде (даже через метод доступа этого свойства).

С другой стороны, 'filepath' и 'filename' должны быть освобождены в методе -dealloc объекта, в который они включены. Невыполнение этого требования (при условии, что в режиме подсчета ссылок) приведет к утечкам.

...