(iOS) Управление памятью для временных переменных - PullRequest
1 голос
/ 10 марта 2012

Таким образом, стандартное правило: если объект создается с помощью alloc, copy или сохранен, он требует последующего освобождения.Объекты, созданные с помощью удобных методов, автоматически высвобождаются.Но как насчет временных переменных, определенных с помощью «=» и используемых в рамках метода?например,

NSError *error = nil;
NSString *tempString = @"foo";
int number = otherInt * 32;
NSUInteger row = [indexPath row];
NSArray *sameArrayDifferentPointer = otherArray;

или даже

NSArray *sameArrayDifferentPointer = (*NSMutableArray) otherMutableArray;

Я знаю, что последний является "плохим", но компилируется нормально и не выдает исключений.

Ответы [ 2 ]

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

Но как насчет временных переменных, определенных с помощью "=" и используемых в области действия метода?

Применяются те же правила. Вы alloc, copy или retain эти значения? Я не вижу ни одного alloc, copy или retain в предоставленных вами примерах. Следовательно, release не требуется.

1 голос
/ 10 марта 2012

error, number и row не являются объектами (или указателями на объекты), поэтому их не нужно (и они действительно не могут быть) освобождены.(number - это int, row - либо беззнаковое int, либо беззнаковое длинное, error - это указатель на ноль.)

tempString будет автоматически освобождено - строка

NSString *tempString = @"foo";

является эквивалентом

NSString *tempString = [NSString stringWithString:@"foo"];

Если вы пишете это вторым способом, становится понятнее, что происходит.Аналогично, ваши массивы эквивалентны вызову [NSArray arrayWithArray:otherArray].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...