2010-09-17 3 views
1

Я разрабатываю приложение, в котором я обнаружил утечку памяти в следующем методе, как удалить утечку?Как решить проблему утечки памяти?

- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attributes 
{ 

    if ((self = [super init])) 
    { 
     _buffer = [str mutableCopy]; 
     _attributes = [NSMutableArray arrayWithObjects:[ZAttributeRun attributeRunWithIndex:0 attributes:attributes], nil]; 
    } 

    return self; 

} 

Я основателей утечки вблизи этой линии "_buffer = [ул mutableCopy];"

В трассировке стека распределения я обнаруживаю одновременное выделение памяти как CFString.

Спасибо.

+1

Пожалуйста, позаботьтесь о форматировании кода. Небольшое усилие с вашей стороны помогает нам помочь вам. –

ответ

2

Я думаю, что у вас не будет утечки памяти, если вы поместите линию [_buffer release] в метод dealloc. У вас есть выделение, потому что для каждого метода, который содержит такие вещи, как alloc, retain и copy ... вы создаете экземпляр нового объекта. И это нормально в этом случае.

Другое дело, что вам нужно беспокоиться об аварии памяти _attributes объекта. У вас есть автореализованный объект, и в следующий раз, когда вы попытаетесь его использовать, он может быть освобожден уже

1

mutableCopy сохраняет возвращенный объект, поэтому ваша ответственность - освободить его, когда вы закончите с ним. Это соответствует Memory Management Rules.

Смежные вопросы