xib storyBoard IBOutlet连出来的视图属性为什么可以被设置成weak
来源:互联网 发布:python取消注释快捷键 编辑:程序博客网 时间:2024/06/06 05:30
答案在前
使用storyboard创建的viewController,那么会有一个叫 _topLevelObjectsToKeepAliveFromStoryboard的私有数组强引用所有top level的对象,同时top level对象强引用所有子对象,那么vc没必要再强引用top level对象的子对象。
好吧!我最初看完之后没理解什么意思,然后查看了stackoverflow和apple doc,把思路阐述一下,如有理解的错误希望指正。
构建过程
什么是top level对象?apple doc给出的答案如下
The top-level objects are the subset of these objects that do not have a parent object.
The top-level objects typically include only the windows, menubars, and custom controller objects that you add to the nib file. (Objects such as File’s Owner, First Responder, and Application are placeholder objects and not considered top-level objects.)
那么我们在Storyboard创建一个控件的引用关系是怎样的呢?
以UIButton为例:UIViewController->UIView->UIButton
如果我们在vc中这样写
他们之间的引用关系用图表示如下:
viewController强引用view对象,同时view强引用button对象,那么你声明属性的时候使用weak就可以了。(觉得Strong也可以,但是完全没必要)
每次我们在SB上创建子控件的时候,我们其实都将它加到view tree上,它的parrent view拥有它的强引用。
释放过程呢
那么内存释放过程是怎样的呢?其实不管声明的属性是强引用还是弱引用,在控制器消失的时候,这个属性消失,View消失,subViews消失,控件也就消失了。
- xib storyBoard IBOutlet连出来的视图属性为什么可以被设置成weak
- iOS开发笔记>> IBOutlet连出来的视图属性为什么可以被设置成weak?
- 为什么IBOutlet属性是weak的?
- 如何在xib/storyboard中设置视图的属性,如圆角?
- xib托线出来的为什么是weak而不是strong
- 为什么xib或storyboard中定义的label属性是weak,而纯代码定义需要用strong
- IBOutlet 为什么默认是weak的
- storyboard设置IBOutlet和IBAction
- xib 和 storyboard 区别 ----------text 的 属性设置 和 button 属性 的 设置
- 为什么 iOS 开发中,xib跟storyboard拖得控件一般为 weak 而不是 strong
- iOS 在storyboard/xib中设置UIView的圆角等属性
- 在xib和storyBoard上设置layer属性的两种方法
- xib与storyBoard中控件属性设置问题
- 在Storyboard中或者xib中设置button的圆角属性,和其他不能设置的熟悉
- IBOutlet的weak和strong reference
- XCode在Storyboard中设置视图的圆角等属性
- storyboard内设置视图属性(圆角和边框)
- 让代码中的属性可以在storyboard的右边栏中进行设置
- Ajax的使用以及跨域(上)
- Add to List 257. Binary Tree Paths
- script中获取input节点
- Editor_EditorPrefs,EditorUtility学习05
- 版本控制:git提交代码
- xib storyBoard IBOutlet连出来的视图属性为什么可以被设置成weak
- response
- Eclipse官方下载
- Static关键字在Java中的具体用法总结
- docker前身今世
- zoj1221
- 程序异常自动生成DMP文件
- Swift 4.0 更新合集、新功能汇总
- **ANDROID** android应用资源(一)