iOS strong与weak的使用
strong修饰的属性是强指针类型的,weak修饰的属性是弱指针类型的
ARC对于内存中的对象管理机制,当某个对象没有被强指针指向的时候,该对象就会被销毁。
所以不适当的使用strong和weak修饰属性容易造成内存泄露。
OC对象(继承NSObject的类创建的对象)用strong修饰。
UI控件连线的时候都会用weak修饰,给了大家一个假象。就是UI控件属性都是用weak修饰的。这种说法是错误的
当我们连线的时候,storyboard会根据图层结构分析,判断是否使用weak修饰,验证:
任何一个控制器都会对应一个根视图:

在stroyboard的表现形式为

所以,当前的图层结构为

每个UIUiew都是一个容器,可以存放其它的UIView,所以UIView有一个subviews属性

subviews是一个数组。数组是一个集合,当我们把某个对象存储到集合中的时候,集合就会对该对象有一个强指向。
这里的copy涉及到深拷贝和浅拷贝的知识。深拷贝会创建新的对象,并且把新的对象的地址赋值给subviews属性
浅拷贝不会创建新的对象,知识拷贝当前数组对象的地址,并且把地址赋值给subviews属性。无论是深拷贝,浅拷贝。subviews都是一个强指针。
所以,当前的层级关系是

所以,当我们向stroyboard中拖拽控件的时候。在storyboard中的层级表现形式为

即

这时,viewController已经有一个强指针间接指向UISwitch对象了。当我们连线的时候,设置的viewController的属性,如果此时再用strong修饰switch属性。
就会出现这样的情况

viewController对同一个对象强引用了两次,不符合ARC内存管理机制。所以storyboard分析以后,默认我们使用weak修饰连线的属性。
即

此时,图层结构为

下面,我把控制器自带的view给删除掉。此时self.view= nil;所以强指针指向就断开了


这个时候,我拖拽一个imageView控件,

这个时候,imageView没有被强指针指向,所以,当我们给imageView拖线的时候,storyboard分析,viewController没有对imageView强引用,此时viewcontroller需要强指针指向。
所以storyboard就会建议我们使用强指针。此时的层级关系是

所以,当我们给imageview拖线的时候:

所以,UI控件通过连线并不一定是用weak修饰的。面试的时候经常会被问到,一定要记住!!!不要掉进面试官的坑里。
iOS strong与weak的使用的更多相关文章
- iOS Strong 和 weak
iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC) strong 用来修饰强引用的属性: @property (strong) SomeClass ...
- IOS strong和weak的区别
strong和weak的区别 strong表示保留它指向的堆上的内存区域不再指向这块区域了. 也就是说我强力指向了一个区域,我们不再指向它的条件只有我们指向nil或者我自己也不在内存上,没有人stro ...
- iOS strong 和weak的形象理解
转自:http://hi.baidu.com/phone_lwc/item/c36e5bfe1cf9c313ce9f32be 觉得讲的很容易理解 The difference is that an o ...
- IOS开发 strong,weak,retain,assign,copy nomatic 等的区别与作用
strong,weak,retain,assign,copy nomatic 等的区别 copy与retain:1.copy其实是建立了一个相同的对象,而retain不是:2.copy是内容拷贝,re ...
- iOS - property,strong,weak,retain,assign,copy,nomatic 的区别及使用
1:ARC环境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的.xcod ...
- iOS retain、strong、weak、assign
iOS retain.strong.weak.assign strong与weak是由ARC新引入的对象变量属性xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和a ...
- iOS内存管理retain,assign,copy,strong,weak
转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retain ...
- [转]iOS ARC机制 weak strong
写在开头 虽然距离WWDC2011和iOS 5已经快一年时间,但是很多开发者并没有利用新方法来提高自己的水平,这点在ARC的使用上非常明显(特别是国内,基本很少见到同行转向ARC).我曾经询问过一些同 ...
- 【iOS开发系列】XIB IBOutlets use strong or weak ?
有人问.在ARC下,IBOutlets究竟应该定义成strong 还是 weak ?支持这个答案的人最多.答案仅是摘自官方文档的一个片段: From a practical perspective, ...
随机推荐
- Coding the Matrix Week 1 The Vector Space作业
Coding the Matrix: Linear Algebra through Computer Science Applications 本周的作业较少,只有一个编程任务hw2.作业比较简单,如 ...
- Angularjs学习---ubuntu12.04中karma安装配置
Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结 karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...
- SZU:A25 Favorite Number
Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Number Only Ju ...
- RoleManager 进行角色管理
ASP.NET Identity 使用 RoleManager 进行角色管理 (VS2013RC) 注:本文系作者原创,但可随意转载. 最近做一个Web平台系统,系统包含3个角色,“管理员, 企业用户 ...
- ASP.NET WEB API构建基于REST风格
使用ASP.NET WEB API构建基于REST风格的服务实战系列教程[开篇] 最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http ...
- N个骰子的点数和的概率分布
程序设计思路: 假设有n个骰子,关键是需要统计每个点数出现的次数.首先分析第一个骰子点数和有1到6的点数,计算出1到6的每种点数 的次数,并将结果用一个数组pos1记录.然后分析有两个骰子时, 点数为 ...
- UAC权限
.NET中提升UAC权限的方法总结 [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权 ...
- 分布式搜索ElasticSearch构建集群与简单搜索实例应用
分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...
- C++11标准后的C++阅读书目
C++11标准后的C++阅读书目 投递人 itwriter 发布于 2013-09-25 19:44 评论(2) 有285人阅读 原文链接 [收藏] « » 英文原文:C++ Reading L ...
- MongoDB学习(翻译2)
C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命名空间到您的程序中: usin ...