1.
NSMutableArray *arr = [[[NSMutableArray alloc] init] retain];
Существует только несколько способов явного увеличения 1 в управлении памятью target-c, таких как выделение, сохранение, копирование, получение, новое.Если вы используете какой-либо из них, вы должны выпустить в будущем.Вы использовали «alloc» и «retain» для одной и той же переменной «arr».
2.
NSString *value = [[dict objectForKey:key] retain];
[arr addObject:value];
sumOfAllValues += [value intValue];
Вам не нужно «сохранять» там.Также после того, как вы добавите значение в массив «arr», «arr» освободит все элементы ALL, когда «arr» будет выпущен вами.Поэтому, если вы хотите сохранить «оставьте» его, вам нужно [значение release] в последней строке цикла for.
3.
NSArray *sorted = [[arr sortedArrayUsingFunction:sort context:NULL] retain];
Опять же, вы этого не сделаетенужно "сохранить".Если вы только напишите [arr sortedArrayUsingFunction: sort context: NULL], тогда он автоматически выдаст объект с опцией autorelease.Так что вам не нужно заботиться об «выпуске» в будущем.
У всех остальных в вашем коде есть проблема, аналогичная этим первым трем.Просто убедитесь, что
1.Если вы использовали одно из: alloc, retain, attain, copy, new, mutableCopy и т. Д., Вы должны выпустить в будущем.
2.NSArray и NSMutableArray выпустят их элементы, когда вы отпустите их.Поэтому после того, как вы добавили какой-либо объект и вам не нужно ссылаться на эту переменную, его лучше освобождать после добавления в массив.Другие сборщики или контейнеры работают таким же образом.
3.Точно так же, если вы добавляете какой-либо экземпляр UIView как подпредставление в суперпредставление, то это суперпредставление будет заботиться об управлении памятью своих подпредставлений.Другими словами, если вы отпустите суперпредставление, его подпредставления будут автоматически освобождены.
Редактировать:
4.«retain» используется для увеличения внутреннего счетчика объекта.Обычно он используется в методе установки, чтобы передать право владения старой переменной новой переменной.Таким образом, вы почти никогда не используете «сохранить» при создании нового экземпляра.
Пожалуйста, исправьте меня, если я ошибаюсь!