我有这个从网络上某个地方得到的示例代码。
我的 .h 文件如下所示:
@interface PopupWindowString : CCNode <UITextFieldDelegate> {
UIView *landscapeView;
UITextField *username;
}
我在 init 方法中的 .m 文件有:
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。
在这段代码之后,landscapeView 上的 retainCount 似乎仍然是 1:
[username release];
[username removeFromSuperview];
[landscapeView release];
[landscapeView removeFromSuperview];
我不知道如何处理它......我没有其他地方可以使用landscapeView,它只在这里。
我已经尝试对 UIView 进行子类化以尝试找出调用保留和释放的位置,这是列表:
打开弹窗:
- 保留来自我的 PopupWindowString 初始化方法的调用
- 从 [CALayer layoutSublayers] 保留
- 从 CALayerLayoutIfNeeded 释放
关闭弹出窗口:[我打了一个 CCMenuItemImage]
- 从 [UIView(Hierarchy) 子视图] 中的 [__NSArrayM addObject] 保留
- 从我的代码中释放[我之前粘贴的那个]
- 从我的代码中释放 [从子视图中删除]
如您所见,缺少一个版本。我认为,在关闭弹出窗口时,第一次保留是由我触摸视图引起的。然而,它永远不会被释放。
有谁知道如何解决这个问题?
谢谢,克里斯蒂安