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

Posted

技术标签:

【中文标题】Objective-C 在子视图数组中跟踪我的视图【英文标题】:Objective-C keep track of my view in subviews array 【发布时间】:2011-11-25 13:53:49 【问题描述】:

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

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

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

    [self.view addSubview:myButton];

然后我们释放按钮。

    [myButton release]

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

【问题讨论】:

【参考方案1】:

您可以简单地将其分配给实例变量:

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

您只需要小心:一旦您执行[myInstanceVariable removeFromSuperview]; 之类的操作,它可能会立即被释放(如果您没有保留它),然后它会指向无效内存。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Objective-C 在子视图数组中跟踪我的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用objective-c在xcode中使用共享偏好? [复制]

父视图在子视图后面

UIBarButtonItem 未显示在子视图中

TempData 仅显示在子局部视图中,而不显示在父局部视图中

如何使用swift在子视图中居中标签

在子视图上使用 onclicklistener 获取 JSON 对象