Я пропускаю несколько байтов - почему? - PullRequest
0 голосов
/ 24 июня 2011

Извините за очень неопределенный заголовок, но я просто отлаживаю свою программу с помощью LEAKS и обнаружил утечку в следующих нескольких строках кода:

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; // LEAKS shows 80%
[dateFormat setDateFormat:@"EEE-dd-MMMM-yyyy"];
NSDate *today = [[NSDate alloc] init]; // LEAKS shows 20%
NSString *theDate = [dateFormat stringFromDate:today];

[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 withObject:theDate];

[dateFormat release];
[today release];

LEAKS говорит мне, что одна линия протекает на 80%, а другая на 20%. Но почему? Я выпускаю оба ...

Это всего 16 байтов, так что, думаю, мне не стоит беспокоиться ... или мне стоит беспокоиться о подобных вещах? В любом случае, меня беспокоит, что я не понимаю, почему мой код протекает, поэтому любая помощь будет очень признательна. Спасибо!

Кроме того, пока мы находимся на теме LEAKS - в моей программе также есть пара других утечек блоков, таких как 'Malloc 32 Bytes Foundation - [NSCFString appendString:]' ... ... LEAKS не дает мне никаких ссылка на мой код, где это должно быть утечка. Как мне узнать, где эта память просачивается?

Извините, если это все основные вещи, но, как вы, наверное, поняли, я впервые использую УТЕЧКИ.

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

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Я бы изменил вашу методологию, если вы отпускаете объекты сразу и не выполняете больше действий с ними. Попробуйте этот подход, используя объекты, выпущенные в виде авро-релиза:

NSString *theDate = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                   dateStyle:@"EEE-dd-MMMM-yyyy" 
                                                   timeStyle:nil];
[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 
                            withObject:theDate];

* обратите внимание, я не проверял этот код на точность или утечку, но он должен делать то же самое.

1 голос
/ 24 июня 2011

Попробуйте использовать автоматически выпущенные инициализаторы. Например, вместо использования

date = [[NSDate alloc] init];

использование

date = [NSDate date];

и пр.

Когда я использую инициализаторы с автоматическим выпуском, я не получаю сообщения об утечке.

0 голосов
/ 24 июня 2011

Полагаю, вам также следует выпустить theDate? 1002 *

...