2011-11-04 25 views
3

这听起来可能是一个新手问题,但我是iOS开发新手。 假设有这个代码。在addSubview之后改变视图,什么是好的做法?

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 (...) ... }

回答

1

你的代码是罚款,只要它是所有相同的方法和label不在任何...部分中重新分配。

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

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

为了再次得到你的子视图参考的保持,你有两个选项:

  • 添加它之前设置的子视图的标签,然后使用viewWithTag:得到它以后
  • 保持对它的引用子视图作为一个实例变量(在这种情况下,创建它后你不会释放它,你会在dealloc上释放它)。
0
  • 我用两种方式 - 修改之前和之后,并没有任何问题,无论哪种方式。超级视图保留子视图,因此如果您不释放超级视图或将子视图设置为NIL,那么您很安全。

  • 是的,你需要释放你addSubview后添加的观点,但最容易做这样的:

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

然后,它会自动释放,你不必担心明确释放它。

3
  1. 将视图的属性添加为子视图后,可以更改视图的属性。这些属性将会在UIKit渲染东西时在runloop的下一轮应用(或动画)。

  2. 如果您不再需要拥有它,您应该在将其添加为子视图后绝对地释放您的视图。换句话说,遵循所有可可程序设计的内存管理指南。做addSubview会导致欠款视图保留它(因为它需要它)。如果需要,虽然变化对未来看法的属性,你应该保留它,所以你可以访问它

相关问题