Загрузка и освобождение UIView динамически - PullRequest
0 голосов
/ 10 ноября 2011

Я хочу загрузить вид динамически при нажатии кнопки.

Позволяет сказать, что представление 'MyView'

Я объявил это как

IBOutlet UIView *myView;

и подключил его через конструктор интерфейса из myView.xib made.

Я не установил свойство и не синтезировал для этого представления

Теперь я хочу выделить этому виду память по нажатию кнопки

, поэтому я попробовал метод нажатия кнопки моего viewController

(void) buttonPressed1{
   myView = myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
   myView.frame = CGRectMake(30, 40, 200, 200);
   [self.view addSubview:myView];
}

Успешно загружен. :)

Теперь я хочу получить доступ к этому представлению в другом нажатии кнопки ..

так я и написал

-(IBAction) buttonPressed2:(id)sender
{
    myView.alpha = 0;
    [myView release];   
}

поэтому, когда я запускаю это --- все работает нормально

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

Но теперь, когда я снова нажимаю на кнопку, чтобы добавить вид, он говорит:

modifying layer that is being finalized - 0x6807b60

затем при нажатии кнопки 2 происходит сбой ...

По сути, мое требование - сохранять это представление в памяти только тогда, когда оно используется после того, как оно было использовано, оно должно быть освобождено.

так что вышеприведенный подход хорош или есть другой способ сделать это ...

и что означает эта ошибка ????

! больше запроса

Здесь, в вышеприведенном случае ....

Память для myView выделяется во время выполнения по нажатию кнопки ???? ....

Как и в случае, когда я тестирую это с помощью инструмента в xcode, на графике при нажатии кнопки не отображается распределение ...

поэтому, пожалуйста, помогите мне ...

Пожалуйста, помогите ..

Заранее спасибо

1 Ответ

1 голос
/ 10 ноября 2011

Когда вы отпускаете представление: [myView release]; оно не удаляется из суперпредставления. Более того: вы не должны выпускать его, так как он был создан как автоматически выпущенный объект.

Решение может быть следующим:

(void) buttonPressed1{
  if (myView)
  {
      [myView removeFromSuperview];
  }
  myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
  myView.frame = CGRectMake(30, 40, 200, 200);
  [self.view addSubview:myView];
}
-(IBAction) buttonPressed2:(id)sender
{
    myView.alpha = 0;
    //[myView release];   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...