我对内存管理有疑问。 例如,我有一个iPhone应用程序,它使用多个以编程方式创建的视图。 例如以编程方式生成的按钮。
UIButton *myButton=[UIButton alloc] initWithFrame:...; //etc
然后,通常我们将此按钮添加到子视图数组:
[self.view addSubview:myButton];
然后我们发布按钮。
[myButton release]
当我需要删除此按钮时,如何在子视图数组中跟踪此按钮? 我知道我可以使用tag属性来做这件事,但我认为存在另一种与它保持联系的方法。
答案 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