如何发布/删除UIImageView类?

时间:2011-07-15 14:19:28

标签: iphone objective-c xcode4 uiimageview

我是iPhone编程的新手,所以我甚至可能都没有使用正确的方法...无论如何,我正在尝试制作游戏,当我想创建一个敌人时,我会创建一个新的UIImageView,就像这样:

enemyBird *asdf = [[enemyBird alloc] initWithFrame:CGRectMake(30, -20, 45, 30)];
[self.view addSubview:asdf];

当enemyBird初始化时,会产生一个NSTimer,因此敌人可以飞来飞去做自己的事情。现在,我希望在它离开屏幕之后摆脱它,在这里的代码中:

    if (self.center.y > 500)
    {   //[self dealloc];  //doesn't work
        //[self release];  //doesn't work
        //[self removeFromSuperview];   //this makes it disappear, but the NSTimer is still running
    }

但我不知道该怎么做。我这样做了吗?或者我应该采取完全不同的方式吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

对于游戏开发更好地使用cocos2d框架:这很容易

答案 1 :(得分:1)

您必须将removeFromSuperview发送到图片视图,才能将其从主视图中删除。 同时,你使计时器失效,你可能没事。

也可以在分配/初始化图像视图并将其添加到主视图之后,您应该将其释放。

答案 2 :(得分:1)

  1. 当视图保留其所有子视图时,您可以在将其添加到控制器视图后立即释放它:

    enemyBird *asdf = [[enemyBird alloc] initWithFrame:CGRectMake(30, -20, 45, 30)];
    [self.view addSubview:asdf];
    [enemyBird release];
    
  2. 在您的计时器处理程序中,当鸟离开屏幕时将其从superview中删除,将引用设置为nil(以确保您不会访问已解除分配的实例)并使计时器无效,以便它不会再次触发:

    if (self.center.y > 500)
    {   
        [enemyBird removeFromSuperview];   
        enemyBird = nil;
        [timer invalidate];
    }