Objective-C отслеживает мой взгляд в массиве subviews - PullRequest
0 голосов
/ 25 ноября 2011

У меня вопрос по управлению памятью. Например, у меня есть приложение для iPhone, которое использует несколько программно созданных представлений. например, программно сгенерированные кнопки.

    UIButton *myButton=[UIButton alloc] initWithFrame:...; //etc

тогда, обычно мы добавляем эту кнопку в массив subviews:

    [self.view addSubview:myButton];

тогда отпустим кнопку.

    [myButton release]

Когда мне нужно удалить эту кнопку, как я могу отслеживать эту кнопку в массиве subviews? Я знаю, что могу сделать это, используя свойство tag, но я думаю, что существует другой способ сохранить связь с ним.

Ответы [ 2 ]

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

Вы можете попытаться объявить где-нибудь свойство сохранения типа UIButton*, которому можно присвоить значение указателя для вашего экземпляра кнопки:

@interface myclass
@property (retain, nonatomic) UIButton *savedButton;
@end

@implementation myclass
@synthesize savedButton;

- (void) someMethod...
{
  ...
  UIButton *myButton=[UIButton alloc] initWithFrame:...;
  [self.view addSubview:myButton];
  self.savedButton = myButton;
  [myButton release];
  ...
}
...
@end
0 голосов
/ 25 ноября 2011

Вы можете просто присвоить его переменной экземпляра:

UIButton *myButton = ...;
[self.view addSubView:myButton];
myInstanceVariable = myButton;
[myButton release];

Вам просто нужно быть осторожным: как только вы сделаете что-то вроде [myInstanceVariable removeFromSuperview];, оно может быть немедленно освобождено (если вы несохранить его), а затем он будет указывать на недопустимую память.

...