【问题标题】:Cannot release UIView in cocos2dcocos2d中无法释放UIView
【发布时间】:2011-09-13 16:30:47
【问题描述】:

我从网上某处获得了这个示例代码。

我的 .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 子类化以尝试找出调用保留和释放的位置,这是列表:

打开弹窗:

  1. 保留来自我的 PopupWindowString 初始化方法的调用
  2. 从 [CALayer layoutSublayers] 保留
  3. 从 CALayerLayoutIfNeeded 发布

关闭弹出窗口:[I hit a CCMenuItemImage]

  1. 从 [UIView(Hierarchy) 子视图] 中的 [__NSArrayM addObject] 保留
  2. 从我的代码中释放 [我之前粘贴的那个]
  3. 从我的代码中发布 [从子视图中删除]

如您所见,缺少一个版本。我认为,在关闭弹出窗口时,第一次保留是由我触摸视图引起的。但是它永远不会被释放。

有人知道如何解决这个问题吗?

谢谢, 克里斯蒂安

【问题讨论】:

  • retainCount 方法永远不能返回 0。不要调用该方法。没用。
  • 整件事都是我的错误......我试图调试为什么该死的东西不起作用,我正在使用不同的方式删除子视图 [某种数组覆盖所有子视图一一释放]。在此期间,我删除了自动释放弹出窗口的调用...然后在我进行了所有更改之后,我只是忘记将其放回...该死的 :( 抱歉浪费了时间。

标签: objective-c cocos2d-iphone dealloc retaincount


【解决方案1】:

如果您正在平衡所有隐含或直接调用的保留与释放,那么您的工作就完成了。

你确定对象被泄露了吗?您是如何确定的(请注意,retainCount 永远不是正确答案)?

正如所写,该代码似乎没有泄漏landscapeView。请注意,如果释放它的代码不在您的 dealloc 中,您需要将 landscapeView 设置为 nil 以防止在 dealloc 中的 [landscapeView release] 时发生崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多