Выделите и освободите память для UIView во время выполнения - PullRequest
0 голосов
/ 14 ноября 2011

Я делаю приложение, в котором есть

MyViewController1

MyViewController2 + 9 UIView внутри него (MyView1, MyView2, MyView3, MyView4, MyView5, MyView6, MyView7, MyView8, MyView9).

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

Итак, что я сделал ->

Шаг 1) добавил каждое представление в myViewController2.xib (представления не добавляются в представление viewController2 ..i.e они не являются дочерними по отношению к viewController2)

Шаг 2) IBOutlet UIView * myView (1..9); в MyViewController2.h

Шаг 3) свойство (неатомное, сохранение) UIView * myView (1..9) в MyViewController2.h

Шаг 4) синтезирует myView (1..9) в MyViewController2.m

viewDidLoad(){ 
    myView1.frame = CGRectMake(x, y, y, y)//any Value
    [self.view addSubView:myView1]; //added as child to this view

    //I did for all the view

} 

Шаг 5) Теперь применяется альфа = 0/1, переходы, любые другие свойства в соответствии с требованием.

Все хорошо ....

Но теперь Мое приложение занимает слишком много памяти, когда загружается эта страница ...

Итак, теперь я подумал:

Выделяйте память каждому UIView только при необходимости, т. Е. По нажатию кнопки и когда это не требуется, освободите память для этого представления.

как это сделать, так как все мои 9 представлений были созданы с использованием IB, так как загрузить представление во время выполнения из конструктора интерфейса ???

Пожалуйста, предложите любое другое решение, если есть ...

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

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Вы не можете добавлять представления во время выполнения, если они созданы в IB. Все объекты, созданные в IB, выделяются / инициализируются до вызова даже viewDidLoad. Если вы хотите, чтобы представление создавалось во время выполнения, вам придется создавать его программно, а не в IB. (Предложение Адхиры будет хорошо работать, если вы решите пойти по этому пути. Но вы должны убедиться, что вы не создаете представления в IB. Кроме того, представления не могут быть сохранены свойства. В противном случае удаление их из суперпредставления не будет отпустите их.)

Однако это может быть необязательным. Пока вы не размещаете какой-либо контент (например, изображения) в своих представлениях, они могут не занимать много памяти. Вы можете создавать представления в IB, но добавлять контент к ним программно, по мере необходимости, и выпускать этот контент программно, когда он больше не нужен.

0 голосов
/ 14 ноября 2011

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

[myView1 removeFromSuperview];
myView2.frame = CGRectMake(...);
[self.view addSubview: myView2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...