Мне удалось смутить некоторые элементы управления памятью. Я новичок в объектно-ориентированных и управляемых памятью языках.Управление памятью iOS: ivars, static и NSStrings
Я прочитал руководство по управлению памятью, но я по-прежнему путаюсь в нескольких вещах. 1) Есть ли необходимость в очистке иваров и переменных метода, которые не сохраняются ни одним объектом. Например,
-(void) someMethod{
int count = 100;
for (int i=0; i <count; i++) {
NSLog(@"Count = %d", i);
}
}
Что происходит с «count» var после завершения метода? Если метод выделяет много временных переменных, удаляются ли они из памяти до тех пор, пока они не будут освобождены, объекты alloc'd? Или мне нужно каким-то образом установить их в нуль?
2) Если у меня есть статическая переменная, например, NSString, мне нужно что-либо сделать для ее удаления из памяти, когда класс отменен?
3) Я заметил, что у NSStrings, похоже, есть saveCount 2147483647, который, по словам Википедии, является максимальным значением для 32-разрядного целого числа со знаком.
http://en.wikipedia.org/wiki/2147483647
myString retainCount = 2147483647
-(void) someMethod{
NSString *myString = @"testString";
NSLog(@"myString retainCount = %d", [myString retainCount]);
// logs: myString retainCount = 2147483647
}
Что происходит с этим в конце метода? Неужели эта память когда-либо опустела? Строка не ссылается ни на что. Я понимаю, что метод @ "" для NSString возвращает объект с автореализацией, но в любом случае смысл автореализации чего-либо с saveCount 2147483647? В этом случае, какой смысл сохранять или выпускать ANY NSString?
Мне хорошо известно, что keepCount следует игнорировать, но это просто заставляет меня не знать, что здесь происходит.
4) Это вообще? Я знаю, что памяти, связанной с NSString, не так много, чтобы писать домой, но я хочу быть хорошим гражданином в области управления памятью, и меня больше интересуют лучшие практики, чем что-либо еще.
Фактически 2147483647 - это наибольшее значение * подписанного * 32-битного целого числа. Он используется рамкой Cocoa для обозначения постоянного объекта, который не может быть выпущен. Обычные NSStrings, которые вы создаете, имеют более традиционное количество учетных записей. – JeremyP
Спасибо за разъяснение. Вопрос отредактирован соответствующим образом. – averydev