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的使用的更多相关文章

  1. iOS Strong 和 weak

    iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC) strong 用来修饰强引用的属性: @property (strong) SomeClass ...

  2. IOS strong和weak的区别

    strong和weak的区别 strong表示保留它指向的堆上的内存区域不再指向这块区域了. 也就是说我强力指向了一个区域,我们不再指向它的条件只有我们指向nil或者我自己也不在内存上,没有人stro ...

  3. iOS strong 和weak的形象理解

    转自:http://hi.baidu.com/phone_lwc/item/c36e5bfe1cf9c313ce9f32be 觉得讲的很容易理解 The difference is that an o ...

  4. IOS开发 strong,weak,retain,assign,copy nomatic 等的区别与作用

    strong,weak,retain,assign,copy nomatic 等的区别 copy与retain:1.copy其实是建立了一个相同的对象,而retain不是:2.copy是内容拷贝,re ...

  5. iOS - property,strong,weak,retain,assign,copy,nomatic 的区别及使用

    1:ARC环境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的.xcod ...

  6. iOS retain、strong、weak、assign

    iOS retain.strong.weak.assign strong与weak是由ARC新引入的对象变量属性xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和a ...

  7. iOS内存管理retain,assign,copy,strong,weak

    转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retain ...

  8. [转]iOS ARC机制 weak strong

    写在开头 虽然距离WWDC2011和iOS 5已经快一年时间,但是很多开发者并没有利用新方法来提高自己的水平,这点在ARC的使用上非常明显(特别是国内,基本很少见到同行转向ARC).我曾经询问过一些同 ...

  9. 【iOS开发系列】XIB IBOutlets use strong or weak ?

    有人问.在ARC下,IBOutlets究竟应该定义成strong 还是 weak ?支持这个答案的人最多.答案仅是摘自官方文档的一个片段: From a practical perspective, ...

随机推荐

  1. 开启apache服务

    安装后如果需要手动添加Sevice,可以按照如下方法: Apache版本:httpd-2.2.15_win32 Apache Service Monitor 提示:“No services insta ...

  2. 长乐集训2012.7.11 happy(指针技巧的运用)

    题1  Noip的快乐 (happy.pas/c/cpp) [问题描述] 终于到了一年一度的Noip比赛了,多么令人期待和兴奋的一天!其实,人们最高兴的还不是遇见老朋友,而是结交新朋友.可是结交新的朋 ...

  3. [原]逆向iOS SDK -- +[UIImage imageNamed:] 的实现

    汇编代码: ; Dump of assembler code for function +[UIImage imageNamed:] ; R0 = UIImage, R1 = "imageN ...

  4. JS之For---in 语句

    下面说一下for… in语句.可直接把下面的代码复制到浏览器的控制台或Node环境下去执行. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //用来快速迭代对象. var o ...

  5. 【转载】Stack Overflow: The Architecture - 2016 Edition

    转载:http://www.infoq.com/cn/news/2016/03/Stack-Overflow-architecture-insi?utm_source=tuicool&utm_ ...

  6. Make Things Move -- Javascript html5版(三)三角函数形式的动画

    角度制和弧度制 生活中通常是用角度度来理解的,代码里都是用弧度制来计算. 角度转弧度:DEG_TO_RAD = Math.PI / 180 弧度装角度:RAD_TO_DEG = 180 / Math. ...

  7. Web Api初试

    Web Api初试 前言 ASP.NET Web API 与之前的内建HTTP服务解决方案的不同之处在于,它一开始就是围绕HTTP协议及其消息语义构建起来的.与WCF REST或ASP.NET AJA ...

  8. Modern 阅读笔记 一 PSR标准

    一.标准 PSR php standards Recommendation PHP 推荐标准 PSR-1 基本代码风格 PSR-2 严格的代码风格  PSR-3 日志记录器接口 PSR-4 自动加载  ...

  9. python打包成window可执行程序

    python程序可以通过python hello.py执行,但是需要安装python的解释器,并配置环境变量,打包成exe程序之后可以直接执行. 使用setup工具和py2exe可以做到这一点. 最简 ...

  10. xml数据解析

    xml数据解析 在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.Kiss ...