И все-таки задам этот вопрос. Хочу подтвердить свои сомнения. Разработка ведется для iPhone.
[scoreLabel setString:[[NSString alloc] initWithFormat:@"Score: %d", score]];
Этот код вызовет утечку памяти?
Компьютерная графика |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Компьютерная графика » ООП, Python, Ruby, Lua, Obj-C, Smalltalk, D » Objective-C и работа с памятью
И все-таки задам этот вопрос. Хочу подтвердить свои сомнения. Разработка ведется для iPhone.
[scoreLabel setString:[[NSString alloc] initWithFormat:@"Score: %d", score]];
Этот код вызовет утечку памяти?
IMHO, да
Посокльку alloc вызывает создание нового объекта, т.е.
[[NSString alloc] initWithFormat:@"Score: %d", score]
создает новый объект (not autoreleased), и передает его в setString, который скорее всего у текущего объекта вызовет release/autorelease, сделает присвоение и retain.
Поэтому после этого у нас будет строка с refCount=2
Если я не ошибаюсь, есть метод [NSString stringWithFormat:] который возворащает autoreleased-объект. Там всего должно быть в порядке
Я тоже так думаю, спасибо за ответ =). Автоматический подсчет ссылок ИМХО не хорошо. Автосборка мусора- это да. А подсчет ссылок.. Сколько я видел "добрых" отзывов об его использовании в string.
Вы здесь » Компьютерная графика » ООП, Python, Ruby, Lua, Obj-C, Smalltalk, D » Objective-C и работа с памятью