关于removeFromSuperview关键的几个点
2016-01-04 16:45
246 查看
removeFromSuperview
Unlinks the receiver from its superview and its window, and removes it from the responder chain.
译:把当前view从它的父view和窗口中移除,同时也把它从响应事件操作的响应者链中移除。
分析:
这里有两个关键点,可以帮助我们理解在ios当中view是怎么来组织的:a。视图的组织形式;b。响应者链;
今天只分析一下视图的组织形式,关于响应者链是和事件处理息息相关的,另文再写。
在ios当中,视图的设计模式可以看做是组件模式,即以树作为存储的数据结构,这种数据结构具有明确的两个特点:
1.父子关系分明,从根节点出发,通过叶节点向下扩展,同一枝的上一个节点就是下一个节点的superview,下一个节点就是上一个节点的subview;不同枝如果同层,则为兄弟节点。
2.layer关系分明,layer在ios中对事件响应具有举足轻重的作用,通常两个重叠的控件,处在上层的会优先响应;
从上面文档的描述,我们可以看到,这两个特性,也是view在操作时候的核心,即一个view的操作关系到两个方面,视图结构和响应者链。
removeFromSuperview,类似一个剪枝,执行此函数,就等于在树形结构中找到该节点,剪去该节点及其子节点,而并非只是剪去该节点自己。同时,另一个操作就是把该对象从响应者链中移除。
- (void)removeFromSuperview
Discussion
If the receiver’s superview is not nil, the superview releases the receiver. If you plan to reuse a view, be sure to retain it before calling this method and release it again later as appropriate.
译:如果当前view对象的父视图不为空,则父视图会release一次当前视图对象。如果你还想重用当前view,你应该在调用removeFromSuperview之前,retain一次当前view对象,但不要忘记,在恰当的时候要release它,以确保没有内存泄露。
Never call this method from inside your view’s drawRect: method.
永远不要在你的view的drawRect方法中调用removeFromSuperview;
Unlinks the receiver from its superview and its window, and removes it from the responder chain.
译:把当前view从它的父view和窗口中移除,同时也把它从响应事件操作的响应者链中移除。
分析:
这里有两个关键点,可以帮助我们理解在ios当中view是怎么来组织的:a。视图的组织形式;b。响应者链;
今天只分析一下视图的组织形式,关于响应者链是和事件处理息息相关的,另文再写。
在ios当中,视图的设计模式可以看做是组件模式,即以树作为存储的数据结构,这种数据结构具有明确的两个特点:
1.父子关系分明,从根节点出发,通过叶节点向下扩展,同一枝的上一个节点就是下一个节点的superview,下一个节点就是上一个节点的subview;不同枝如果同层,则为兄弟节点。
2.layer关系分明,layer在ios中对事件响应具有举足轻重的作用,通常两个重叠的控件,处在上层的会优先响应;
从上面文档的描述,我们可以看到,这两个特性,也是view在操作时候的核心,即一个view的操作关系到两个方面,视图结构和响应者链。
removeFromSuperview,类似一个剪枝,执行此函数,就等于在树形结构中找到该节点,剪去该节点及其子节点,而并非只是剪去该节点自己。同时,另一个操作就是把该对象从响应者链中移除。
- (void)removeFromSuperview
Discussion
If the receiver’s superview is not nil, the superview releases the receiver. If you plan to reuse a view, be sure to retain it before calling this method and release it again later as appropriate.
译:如果当前view对象的父视图不为空,则父视图会release一次当前视图对象。如果你还想重用当前view,你应该在调用removeFromSuperview之前,retain一次当前view对象,但不要忘记,在恰当的时候要release它,以确保没有内存泄露。
Never call this method from inside your view’s drawRect: method.
永远不要在你的view的drawRect方法中调用removeFromSuperview;
相关文章推荐
- Unable to create envelope from given source:
- C语言获取时间的集中方法
- simple-libfm-example-part1
- Building Apps with Over 65K Methods(解决APP引用方法总数超过65536)
- opengl奔溃问题
- JDBC——连接数据库
- 怎么获取字符串中最后一个“\”的位置? 获取字符串子串
- 5攻防实验平台
- 老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源
- Spring配置问题——元素 "context:component-scan" 的前缀 "context" 未绑定
- Spring配置问题——元素 "context:component-scan" 的前缀 "context" 未绑定
- 编译参数-ObjC的说明
- 学习资源
- iOS#import与@class的区别
- 去 IOE,MySQL 完胜 PostgreSQL
- 面向对象的设计模式(十),代理模式
- C++单链表
- MongoDB常用操作命令大全
- Some Java exceptions, messages and errors.
- 硬盘三大种类( SSD ; HHD ; HDD )