这可能听起来像一个新手问题,但我是iOS开发新手。 假设有这个代码。
UILabel* label = [[UILabel alloc] init];
...
[someScrollView addSubview:label];
...
label.text = @"Some Text";
在addSubview之后修改视图是不错的做法?
实际上我可能会关注我的问题,标签可能会在到达label.text
作业之前被释放,例如viewDidUnload
,对吗?并且任务将失败。
总的来说,我的问题是
for (UIView *view in self.subviews) { if (...) ... }
来获取任何子视图?答案 0 :(得分:3)
将视图添加为子视图后,可以更改视图的属性。当UIKit呈现内容时,这些属性将在runloop的下一轮应用(或动画)。
如果您不再需要拥有它,那么在将其添加为子视图后,您绝对应该发布视图。换句话说,遵循所有cocoa编程的内存管理指南。执行addSubview将导致欠视图保留它(因为它需要它)。如果您将来需要在视图上更改属性,则应保留该属性以便访问它
答案 1 :(得分:1)
只要代码完全相同,您的代码就可以了,label
在任何......部分都不会被重新分配。
在将视图添加到子视图之前或之后修改视图没有任何区别。
如果您已分配视图,然后将其添加到子视图,并且您不希望单独引用它,则应释放它 - 这是标准内存管理。超级视图将保留其子视图。
要再次获得对子视图的引用,您的两个选项是:
viewWithTag:
稍后获取答案 2 :(得分:0)
我使用过两种方式 - 前后修改并且没有任何问题。 superview保留了子视图,所以如果你没有发布超级视图或者将子视图设置为NIL,那你就非常安全了。
是的,你需要释放你在addSubview之后添加的视图,但最容易这样做:
UILabel* label = [[[UILabel alloc] init] autorelease];
然后它将自动释放,您不必担心明确释放它。