Как мне освободить / удалить класс UIImageView? - PullRequest
0 голосов
/ 15 июля 2011

Я новичок в программировании для iPhone, так что, возможно, я даже не использую правильные методы ... в любом случае, я пытаюсь создать игру, и когда я хочу создать врага, я создаю новый UIImageView, как это:

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

Когда инициализируется врага, птица делает 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 ]

2 голосов
/ 15 июля 2011

для разработки игр лучше использовать инфраструктуру cocos2d: это довольно просто

1 голос
/ 15 июля 2011
  1. Поскольку представление сохраняет все свои подпредставления, вы можете освободить свой imageView сразу после добавления его в представление контроллера:

    enemyBird *asdf = [[enemyBird alloc] initWithFrame:CGRectMake(30, -20, 45, 30)];
    [self.view addSubview:asdf];
    [enemyBird release];
    
  2. В обработчике таймера, когда птицаоставляет экран, удаляет его из суперпредставления, устанавливает ссылку на ноль (чтобы убедиться, что вы не получите доступ к освобожденному экземпляру) и отменяет действие таймера, чтобы он не срабатывал снова:

    if (self.center.y > 500)
    {   
        [enemyBird removeFromSuperview];   
        enemyBird = nil;
        [timer invalidate];
    }
    
1 голос
/ 15 июля 2011

Вы должны отправить removeFromSuperview на изображение, чтобы вывести его из основного вида. В то же время вы отменяете таймер, и вы можете быть в порядке.

Кроме того, сразу после выделения / инициализации представления изображения и добавления его к основному виду, вы должны освободить его.

...