在addSubview之后更改视图,有什么好的做法?

时间:2011-11-04 07:58:40

标签: objective-c ios uiview

这可能听起来像一个新手问题,但我是iOS开发新手。 假设有这个代码。

UILabel* label = [[UILabel alloc] init];
...
[someScrollView addSubview:label];
...
label.text = @"Some Text";

在addSubview之后修改视图是不错的做法? 实际上我可能会关注我的问题,标签可能会在到达label.text作业之前被释放,例如viewDidUnload,对吗?并且任务将失败。

总的来说,我的问题是

  • 最好在addSubview之后修改视图吗?
  • 是在addSubview之后发布视图的好习惯,以后我是否需要使用以下技术for (UIView *view in self.subviews) { if (...) ... }来获取任何子视图?

3 个答案:

答案 0 :(得分:3)

  1. 将视图添加为子视图后,可以更改视图的属性。当UIKit呈现内容时,这些属性将在runloop的下一轮应用(或动画)。

  2. 如果您不再需要拥有它,那么在将其添加为子视图后,您绝对应该发布视图。换句话说,遵循所有cocoa编程的内存管理指南。执行addSubview将导致欠视图保留它(因为它需要它)。如果您将来需要在视图上更改属性,则应保留该属性以便访问它

答案 1 :(得分:1)

只要代码完全相同,您的代码就可以了,label在任何......部分都不会被重新分配。

在将视图添加到子视图之前或之后修改视图没有任何区别。

如果您已分配视图,然后将其添加到子视图,并且您不希望单独引用它,则应释放它 - 这是标准内存管理。超级视图将保留其子视图。

要再次获得对子视图的引用,您的两个选项是:

  • 在添加标记之前在子视图上设置标记,然后使用viewWithTag:稍后获取
  • 将子视图的引用保留为实例变量(在这种情况下,您不会在创建它之后释放它,您将在dealloc上释放它。)

答案 2 :(得分:0)

  • 我使用过两种方式 - 前后修改并且没有任何问题。 superview保留了子视图,所以如果你没有发布超级视图或者将子视图设置为NIL,那你就非常安全了。

  • 是的,你需要释放你在addSubview之后添加的视图,但最容易这样做:

UILabel* label = [[[UILabel alloc] init] autorelease];

然后它将自动释放,您不必担心明确释放它。