Интеграция UIView в cocos2d: как выпустить элементы UIView? - PullRequest
0 голосов
/ 09 июня 2011

Если я добавляю UITextField в openGLView и удаляю его снова, dealloc никогда не вызывается.

// add a textfield to the openGLView
codeTextfield = [[UITextField alloc] initWithFrame:codeTextfieldFrame];
[[[CCDirector sharedDirector] openGLView] addSubview:codeTextfield];

// remove the textfield
[codeTextfield removeFromSuperview];

// call replaceScene
[CCDirector sharedDirector] replaceScene:[Menu node]];

// dealloc will not be called

Я страдаю этой проблемой долгое время, и в поле зрения нет никакого решения.

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Проверьте количество отсчетов по пути; это должно помочь вам увидеть, что происходит.

codeTextfield = [[UITextField alloc] initWithFrame:codeTextfieldFrame];
// RETAIN COUNT IS NOW 1
[[[CCDirector sharedDirector] openGLView] addSubview:codeTextfield];
// RETAIN COUNT IS NOW 2

[codeTextfield removeFromSuperview];
// RETAIN COUNT IS NOW 1

Чтобы вернуть счетчик к 0 после удаления codeTextfield из представления, вместо этого сделайте следующее:

codeTextfield = [[UITextField alloc] initWithFrame:codeTextfieldFrame];
// RETAIN COUNT IS NOW 1
[[[CCDirector sharedDirector] openGLView] addSubview:codeTextfield];
// RETAIN COUNT IS NOW 2
[codeTextfield release];
// RETAIN COUNT IS NOW 1

[codeTextfield removeFromSuperview];
// RETAIN COUNT IS NOW 0 -- DEALLOC WILL BE CALLED
1 голос
/ 09 июня 2011

addSubview сохраняет вид.Когда вы создали объект с alloc, вы тоже владеете им.Удаление представления только уменьшит счет сохранения на 1. Вы хотите [codeTextfield release] после добавления его в качестве подпредставления.

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