Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在addSubview之后更改视图,好的做法是什么?_Objective C_Ios_Uiview - Fatal编程技术网

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

Objective c 在addSubview之后更改视图,好的做法是什么?,objective-c,ios,uiview,Objective C,Ios,Uiview,这听起来可能是个新手问题,但我对iOS开发还不熟悉。 假设你有这个代码 UILabel* label = [[UILabel alloc] init]; ... [someScrollView addSubview:label]; ... label.text = @"Some Text"; 在添加子视图之后修改视图是否是一种良好的做法? 实际上,我担心的是,可能在到达label.text分配之前,标签会被释放,例如在viewDidUnload中,对吗?而任务将失败 总的来说,我的问题是 最

这听起来可能是个新手问题,但我对iOS开发还不熟悉。 假设你有这个代码

UILabel* label = [[UILabel alloc] init];
...
[someScrollView addSubview:label];
...
label.text = @"Some Text";
在添加子视图之后修改视图是否是一种良好的做法? 实际上,我担心的是,可能在到达
label.text
分配之前,标签会被释放,例如在
viewDidUnload
中,对吗?而任务将失败

总的来说,我的问题是

  • 最好在添加子视图后修改视图
  • 在添加子视图之后释放视图,以及以后如果需要使用以下技术(UIView*view in self.subview){if(…)…}获取任何子视图来查找它,这是一种好的做法吗
      • 我使用了两种方法——前后修改,两种方法都没有任何问题。superview保留了子视图,因此如果不在某个地方释放superview或将子视图设置为NIL,您就相当安全了

      • 是的,您需要释放在addSubview之后添加的视图,但最简单的方法是:

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

      然后它将自动发布,您不必担心显式发布它

    • 将视图添加为子视图后,可以更改其属性。当UIKit渲染内容时,这些属性将在运行循环的下一轮应用(或设置动画)

    • 如果您不再需要拥有视图,则在将其作为子视图添加后,应该完全释放视图。换句话说,请遵循所有cocoa编程的内存管理指南。执行addSubview将导致视图保留它(因为它需要它)。但是,如果将来需要更改视图上的属性,则应保留该属性,以便可以访问它


    • 只要代码都使用相同的方法,并且在任何。。。部分

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

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

      要再次获取对子视图的引用,有两个选项:

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