Я действительно натолкнулся на этот блог запись об оптимизации памяти только вчера. В нем автор приводит конкретные причины, по которым он предпочитает использовать [[NSString alloc] initWithFormat:@"..."]
вместо [NSString stringWithFormat:@"..."]
. В частности, устройства iOS не могут автоматически освобождать пул памяти, как вы бы предпочли, если вы создаете объект автоматического выпуска.
Прежняя версия требует, чтобы вы вручную release
сделали это в такой конструкции:
NSString *remainingStr = nil;
if (remaining > 1)
remainingStr = [[NSString alloc] initWithFormat:@"You have %d left to go!", remaining];
else if (remaining == 1)
remainingStr = [[NSString alloc] initWithString:@"You have 1 left to go!"];
else
remainingStr = [[NSString alloc] initWithString:@"You have them all!"];
NSString *msg = [NSString stringWithFormat:@"Level complete! %@", remainingStr];
[remainingStr release];
[self displayMessage:msg];
Здесь remainingStr
был необходим только временно, и поэтому, чтобы избежать автоматического выпуска (который может произойти НАМНОГО позже в программе), я явно обрабатываю память так, как мне нужно.