2009-08-14 2 views
0

Если я выделяю и инициализирую объект в методе, который вызывается довольно часто, и если я не выпущу его немедленно, станет ли объект кошмаром памяти? Или будут ли игнорироваться alloc и init, если объект уже находится в памяти?Выделение памяти и цикл

Это несколько сложно объяснить, извините!

Спасибо.

ответ

1

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

В сборке мусора, это немного сложнее предсказать, но сборщик мусора должен сделать достойную работу по обработке объектов, которые все расположены рядом друг с другом.

0

Не зная, что вы делаете именно, это трудно сказать, но это звучит, как вы делаете:

for (...) 
    [[Foo alloc] init]; 

В этом случае вы будете течь, так же, как если бы вы сделали

for (...) 
    malloc(...) 

или

for (...) 
    new ...; 

Если вы находитесь в среде GC это не проблема (в Obj-C 2, с поддержкой GC сохранить/relea se не имеют никакого эффекта вообще). Если вы не используете GC, вы пропускаете каждый объект, который вы используете.

С другой стороны, если вы делаете что-то вроде

for (...) 
    [[[Foo alloc] init] autorelease] 

Вы не просочитесь на неопределенное время, но ни один из ваших экземпляров объектов не будет собираться до тех пор, пока не вернетесь к началу цикла событий (то есть. Ваш обработчик событий). В этом случае вы можете в конечном итоге использовать много памяти сразу, без фактического утечки в долгосрочной перспективе.

+0

Я вызываю этот метод каждый раз, когда срабатывает таймер, который несколько раз в секунду. Я не в среде GC. Благодарю. – 2009-08-14 02:06:57

+0

но что вы делаете код? '[[Foo alloc] init]' или '[[[Foo alloc] init] autorelease]'? – olliej

0

Профилировали ли вы свой код? Если это так, вы знаете, что это горячая точка. Если нет, ваша работа в темноте.

Вы упомянули в комментарии «Я вызываю этот метод каждый раз, когда срабатывает таймер, который несколько раз в секунду», и в этом случае его совершенно нерелевантность, стоимость выделения памяти для объекта несколько раз второй будет полностью пренебрежимо мала.

Смежные вопросы