addSubView需要注意的几个点

简介:

addSubview:

Adds a view to the end of the receiver’s list of subviews.

:增加一个视图到接收者的子视图列表中。


- (void)addSubview:(UIView *)view

Parameters

view

The view to be added. This view is retained by the receiver. After being added, this view appears on top of any other subviews.

:view参数代表被增加的view,这个view会被它的接收者retain一次(即引用计数+1)。增加完成之后,这个view将出现在接收者的其他子视图的上面。

ps:关于子视图的出现的层次的问题,可以从这些子视图被保存的数据结构来探寻答案 ,每个视图都有个数组的属性,subviews,这个就是保存的它的子视图的引用。而这个数组的顺序就是代表了各个子视图被加入时的顺序。index=0 的就是最先被加入进去的,以此类推。所以,索引值越高的视图越不容易被覆盖。


Discussion

This method retains view and sets its next responder to the receiver, which is its new superview.

这个方法会retain一次view,并且设置它的下一个响应者是receiver,即它的新的父视图。

ps:在removeFromSuperview里已经说过,其实视图直接的操作往往牵涉到两个方面的操作,一个是视图的数据结构,一个是响应者链。当然,addsubview也不例外。


Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

:每一个视图只能有唯一的一个父视图。如果当前操作视图已经有另外的一个父视图,则addsubview的操作会把它先从上一个父视图中移除(包括响应者链),再加到新的父视图上面。


Availability

  • Available in iOS 2.0 and later.

See Also

    • – insertSubview:atIndex:
    • – insertSubview:aboveSubview:
    • – insertSubview:belowSubview:
    • – exchangeSubviewAtIndex:withSubviewAtIndex:

 

 

addSubview和insertSubview的区别

addSubview 是将view加到所有层的最顶层

相当于将insertSubview的atIndex参数设置成view.subviews count

[view addSubview:oneview] == [view insertSubview:oneview atIndex:view.subviews count]

 

addSubview是加到最后
insertSubview是加到指定的位置

 

为什么要在addsubview:一个view对象后,release它?

 

先看代码:

1
2
3
IMGView *imgView = [[IMGView alloc] initWithFrame:CGRectMake(10, 0, 300, 300)];
[self.view addSubview:imgView];
[imgView release];

为什么imgView要release呢?可能很多人跟我一样,之前不是很清楚。 我们逐行分析一下

第一行,alloc一次,imgView对象retainCount为1,
第 二行,addSubview一次,此方法会把你传过去的对象retain一次,那么此时它的retainCount为2。self.view变为它的第二 个待有者。参考:The receiver retains view. If you use removeFromSuperview to remove view from the view hierarchy, view is released.
第三行,调用release方法,此处释放对imgView的所有权,retainCount减1。

到语言句尾imgView的所有者只剩下self.view,并且它的retainCount仅为1。内存管理第一铁则,谁retain(alloc,copy)谁release(autorelease)。上述的做法也是为了符合这一准则。

 


本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3470550.html,如需转载请自行联系原作者

目录
相关文章
|
弹性计算 Cloud Native 5G
藏经阁2023年书籍推荐
好书一起看,技术干货学习就上藏经阁。藏经阁收录内容涵盖编程语言、云原生、数据库、大数据、AI等热门技术领域,让开发者们享受阅读优质内容。这次为您带来2023年4月至2024年1月的书籍推荐。
1444 5
|
存储 网络安全 Android开发
接口测试:抓包工具证书配置
Charles 抓包工具配置指南:包括Charles的基础设置,证书安装(Mac和Windows),SSL代理设置,移动端(同一WIFI环境,启用透明HTTP代理)和模拟器的代理配置,以及iOS系统的代理与证书安装步骤。注意Android 6+及iPhone 10+的特殊信任设置。配置完成后,通过Charles进行网络请求监控。
|
算法
|
编译器 Android开发 开发者
Android经典实战之Kotlin 2.0 迁移指南:全方位优化与新特性解析
本文首发于公众号“AntDream”。Kotlin 2.0 已经到来,带来了 K2 编译器、多平台项目支持、智能转换等重大改进。本文提供全面迁移指南,涵盖编译器升级、多平台配置、Jetpack Compose 整合、性能优化等多个方面,帮助开发者顺利过渡到 Kotlin 2.0,开启高效开发新时代。
575 0
|
芯片 UED 内存技术
全球 25 大高科技城市排名出炉:北上深上榜,但国内最牛的却是它?
随着城市化进程的加快,根据相关机构的估算,未来大部分人都会居住在城市中。和乡村相比,城市的优势在于更为完善的基础设施、商业圈,当然也包括科技方面。 近日,美国媒体 Business Insider 根据一些研究数据,在网站上放出一个全球 25 大高科技城市排名。其中,上榜的美国城市有 6 个、中国有 5 个、日韩印度各有一个,其他上榜的城市基本为加拿大和欧洲地区。
1977 0
全球 25 大高科技城市排名出炉:北上深上榜,但国内最牛的却是它?
|
算法 程序员 开发工具
代码随想录 学习记录(1)
代码随想录 学习记录(1)
573 0
|
iOS开发 MacOS Windows
Mac 去除自动生成.DS_Store文件
Mac 去除自动生成.DS_Store文件
867 0
|
机器学习/深度学习 算法框架/工具 Python
机器学习(二)深度学习实战-使用Kera预测人物年龄
我们的任务是从一个人的面部特征来预测他的年龄(用“Young”“Middle ”“Old”表示),我们训练的数据集大约有19906多张照片及其每张图片对应的年龄(全是阿三的头像。。。),测试集有6636张图片,首先我们加载数据集,然后我们通过深度学习框架Keras建立、编译、训练模型,预测出6636张人物头像对应的年龄
607 0
机器学习(二)深度学习实战-使用Kera预测人物年龄