Objective-C在子视图数组中跟踪我的视图

时间:2011-11-25 13:53:50

标签: iphone objective-c uiview subview addsubview

我对内存管理有疑问。 例如,我有一个iPhone应用程序,它使用多个以编程方式创建的视图。 例如以编程方式生成的按钮。

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

然后,通常我们将此按钮添加到子视图数组:

    [self.view addSubview:myButton];
然后我们发布按钮。

    [myButton release]

当我需要删除此按钮时,如何在子视图数组中跟踪此按钮? 我知道我可以使用tag属性来做这件事,但我认为存在另一种与它保持联系的方法。

2 个答案:

答案 0 :(得分:0)

您只需将其分配给实例变量:

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

你只需要小心:只要你做[myInstanceVariable removeFromSuperview];这样的事情就可以立即解除分配(如果你没有保留它),那么它会指向无效的记忆。

答案 1 :(得分:0)

您可以尝试在某处声明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