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]
insertSubview是加到指定的位置
为什么要在addsubview:一个view对象后,release它?
先看代码:
1 |
IMGView *imgView = [[IMGView alloc] initWithFrame:CGRectMake(10, 0, 300, 300)]; |
为什么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)。上述的做法也是为了符合这一准则。
addSubView需要注意的几个点的更多相关文章
- 关于addSubView需要注意的事项 -今天吃了一个大亏
addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中. - (void) ...
- addsubview跟insertsubview的区别
子视图是以栈的方式存放的. 每次addsubview时都是在最后面添加. 每次在addsubview前和addsubview后可以看看[self.view.subViews count]: 你看看你的 ...
- pushViewController addSubview presentModalViewController视图切换
1.pushViewController和popViewController来进行视图切换,首先要确保根视图是NavigationController,不然是不可以用的, pushViewContro ...
- addChildViewController 与 addSubview
在viewcontrollerA中, 如果想把controllerB.view添加进来, 可以用 addSubview, 但如果controllerB中有个事件, 使用到 self.navigatio ...
- iOS: 神奇的addSubView
看着addSubView, 本以为是添加多个对象, 但通过测试代码, 发现同一个对象在addSubView中只会添加一次. 想想, 视图对象是通过引用得到的. 在视图的子视图集中, 只保存一个相应的对 ...
- 在[self addsubView:xxx]中,self.name 和 _name的区别
在[self addsubView:xxx]中,self.name 和 _name的区别self.name 会调用重写的getter方法,而_name添加的只是_name 这个成员变量
- 【编程技巧】addSubview和insertSubview的区别
addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subviews count 即 [view addSubview:onev ...
- 如何处理UIVIew addsubview 不显示subview
老代码: addsubview不显示uilabel -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSIn ...
- [self.view addSubview:vc2.view]程序崩溃的解决办法
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIButt ...
随机推荐
- MySQL-负载很高排查思路
工欲善其事必先利其器,我说一下思路 思路:1.确定高负载的类型 htop,dstat命令看负载高是CPU还是IO2.监控具体的sql语句,是insert update 还是 delete导致高负载3. ...
- linux包之sysstat之mpstat与pidstat命令
概述 [root@localhost ~]# rpm -qa|grep sysstsysstat-9.0.4-22.el6.x86_64mpstat是MultiProcessor Statistics ...
- 用Javascript弹出div定义的消息框并往块里面填写文字
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SiteMesh详解
Sitemesh是一种页面装饰技术:它通过过滤器(filter)来拦截页面访问,据被访问页面的URL找到合适的装饰模板等等,感兴趣的朋友可以了解下哦 一,基本概念 1,Sitemesh是一种页面装饰技 ...
- Andaroid L新特性
1.Material Design”(材料设计)的全新设计理念,和Holo相比,Material Design更加色彩丰富,不像Holo那样灰暗 2.1)卡片风格(锁屏界面) 2)环动式设计 And ...
- [mysql] mysql主从复制(基于日志点)
怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修 ...
- java读取properties文件的内容
获得properties文件中某个key对应着的value // 路径名称 + properties的名称,不要“properties” private static final String BUN ...
- 解决SQLite3数据库Error: database disk image is malformed
这种错误的提示一般都是数据库文件出现了问题,具体导致问题的原因不必深究,我们只讨论这种问题的饿解决方法: 比如数据库:test.db 这里还要分两种情况: 情况一: sqlite3 test.db & ...
- 剑指offer系列60---第一个只出现一次的字符
[题目]在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置. * 若为空串,返回-1.位置索引从0开始 * [思路]1 首先遍历字符串数组,添 ...
- 无法找到类:java.lang.ClassNotFoundException: com.tt.javaweb.HttpServletRequest问题解决
问题如下:找不到Httpservlet对应的Class,进入build目录下发现确实没有对应的class文件. 严重: Allocate exception for HttpServletReques ...