Я получил этот пример кода, полученный где-то в Интернете.
Мой файл .h выглядит так:
@interface PopupWindowString : CCNode <UITextFieldDelegate> {
UIView *landscapeView;
UITextField *username;
}
, а мой файл .m в методе init содержит:
landscapeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
CGAffineTransform tr = landscapeView.transform;
tr = CGAffineTransformRotate(tr, (M_PI * -2.0));
landscapeView.transform = tr;
landscapeView.center = [[CCDirector sharedDirector] openGLView].center;
username = [[UITextField alloc] initWithFrame:CGRectMake(160, 100, 160, 90)];
[username setTextAlignment:UITextAlignmentCenter];
[username setDelegate:self];
[username setPlaceholder:@"New name"];
[username setTextColor:[UIColor colorWithRed:255 green:255 blue:255 alpha:1.0]];
[landscapeView addSubview:username];
[[[CCDirector sharedDirector] openGLView] addSubview:landscapeView];
все круто и все, но когда я закрываю всплывающее окно dealloc не вызывается.
Кажется, что retainCount на landscapeView по-прежнему равен 1 после этого кода:
[username release];
[username removeFromSuperview];
[landscapeView release];
[landscapeView removeFromSuperview];
Я понятия не имею, что с этим делать ... У меня нет других мест, где я бы использовал landscapeView, это только здесь.
Я попытался создать подкласс UIView, чтобы попытаться понятьоткуда вызываются функции сохранения и освобождения, и вот список:
Открытие всплывающего окна:
- Сохранение вызова из моего метода инициализации PopupWindowString
- Сохранение из [CALayer layoutSublayers]
- Выпуск из CALayerLayoutIfNeeded
Закрытие всплывающего окна: [Я ударил CCMenuItemImage]
- Сохранить из [__NSArrayM addObject] в [UIView (иерархия)подпредставления]
- освободить из моего кода [тот, который я Paранее]
- релиз из моего кода [удалить из подпредставления]
Как видите, один выпуск отсутствует.Я думаю, что при закрытии всплывающего окна это первое сохранение вызвано тем, что я касаюсь вида.Однако он никогда не выпускается.
Кто-нибудь знает, как исключить это?
Спасибо, Кристиан