iPhone, удобный метод или Alloc / Release? - PullRequest
1 голос
/ 10 апреля 2010

Во время разработки для iPhone у меня была упорная утечка памяти, которую я в итоге отследил до NSXMLParser. Однако, пока я искал это, я подумал о том, чтобы изменить многие из моих удобных методов для размещения / выпуска. Есть ли веская причина для этого? В большом приложении я вижу, как лучше освободить память самостоятельно, но в небольшом приложении есть другое различие между этими двумя методами.

NSNumber *numberToAdd = [NSNumber numberWithInt:intValue];
dostuff ...

OR

NSNumber *numberToAdd = [[NSNumber alloc] initWithInt:intValue];
doStuff ...
[numberToAdd release];

ура Гэри.

Ответы [ 2 ]

4 голосов
/ 10 апреля 2010

Между этими двумя методами нет различий в управлении памятью. В графическом приложении NSAutoreleasePool создается и уничтожается при каждом вращении цикла выполнения, поэтому такие небольшие объекты, скорее всего, будут уничтожены в течение нескольких микросекунд. Единственный раз, когда я вижу, что это имеет значение, это если вы работаете во вторичном потоке и собираетесь создать TON автоматически выпущенных объектов. Тем не менее, вы всегда можете создавать и уничтожать свои собственные пулы автоматического выпуска.

0 голосов
/ 10 апреля 2010

[NSNumber numberWithInt: 1] === [[[NSNumber alloc] initWithInt: 1] авто-выпуск]

Несмотря на то, что numberWithInt: удобнее, требуется больше кода для выполнения. Внутренне, autorelease привязывает этот объект к постоянно растущему массиву.

Если вы в цикле выполняете много выделений, вы можете извлечь выгоду из управления памятью самостоятельно. При нормальном ходе операций пользовательского интерфейса стоимость автоматического выпуска незначительна.

Фактическое определение лотов зависит от вас и от профилировщика. В какой момент преимущество более читабельного кода теряется в пользу более быстрого кода?

...