1.对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)

因为我们一般代理的都是当前的控制器 比如scrollView.delegate = self;这时候就成了上面的一个圈的循环引用。如果上图delegate为强指针,那么也就是UIViewController和scrollView的retainCount 永远最少都为1,所以有强指针指向的那个对象就不会销毁,这就造成了内存泄露。所以要想避免这种内存泄露,也就是避免像上述情况那种的循环引用,必须delegate为弱指针,这样,当UIViewContrller运行完自己的作用域要销毁时,发现没有强指针指向自己,并且retainCount=0,所以它就自动销毁了,而它指向的UIView也就没有了强指针指向,所以retainCount=0,所以也销毁了,这样NSArray也销毁了,最后scrollView也销毁了,就避免了内存泄露的问题。

2.对于assing:也有weak的功效。但是网上有assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针。

经过一番研究,发现如果使用

@property (nonatomic, assign, readwrite) id delegate;

声明一个delegate,那么即便delegate指向的对象销毁了,delegate中依然会保存之前对象的地址,即delegate成为了一个野指针...

3.对于weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。

而使用weak,则不会有上述问题,当delegate指向的对象销毁后,delegate = nil,

所以答案就是,使用weak。

转载于:https://www.cnblogs.com/jingxin1992/p/7056992.html

iOS 关于修饰代理用weak还是assign相关推荐

  1. iOS weak和assign修饰OC对象的区别

    /*1.weak1> OC对象2.assign1> 基本数据类型2> OC对象3.strong1> OC对象4.copy1> NSString2> block5.使 ...

  2. 关于IOS delegate的weak和assign 探讨

    在使用IOS的别人写的SDK时,发现定义的delegate都是assign修饰的,相信很多人也会和我一样刚开始表示很不解. 1.delegate为什么用weak来修饰? delegate 之所以用we ...

  3. ios属性修饰符总结

    ios属性修饰符总结 [email protected]�何使用,什么情况下使用哪种选项不了解,也问了我很多这方面的知识,虽然知道怎么用,但是有些说不出其区别.在这里,再次深入学习一遍,对copy/s ...

  4. weak和assign的区别

    使用weak和assign修饰OC对象的区别 相同点 1.weak修饰OC对象2.assign修饰OC对象和基本数据类型 复制代码 不同点 1.成员变量 1.weak生成的成员变量是用__weak修饰 ...

  5. [iOS]-单例模式\通知\代理

    目录: 参考的博客 单例模式 什么是单例模式 单例模式的优缺点 优点: 缺点: 实现方式 懒汉式: 举一个真实的懒汉式创建单例的例子: 饿汉式: 通知 通知底层实现原理 NSNotification ...

  6. 【iOS开发】代理(delegate)

    代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: ...

  7. iOS传值之代理传值

    iOS中传值方式有好几种,分别是:代理传值,block传值,属性传值,通知传值,单例传值,利用userdefault或者文件方式传值,通常代理传值和block传值使用最普遍,本文介绍代理传值的方式,后 ...

  8. iOS 协议 委托 代理 delegate

    角色 委托方 = 老板 代理方 = 员工 协议 = 合同 说明 委托方传递信息或者事件到代理方,代理方执行相关操作. 翻译:老板把工作材料和工作内容交给员工,员工去干活. 流程 委托方声明协议,并持有 ...

  9. ios手机fiddler代理详细步骤

    索大镇楼,废话不多说 1.安装fildder,可以在你电脑的软件管家中下载,这里就不贴下载地址啦 2.fildder设置 Tools-Otions-HTTPS配置 connetions配置 3.安装证 ...

  10. iOS进阶之底层原理-weak实现原理

    基本上每一个面试都会问weak的实现原理,还有循环引用时候用到weak,今天我们就来研究下weak的实现原理到底是什么. weak入口 我们在这里打个断点,然后进入汇编调试. 这里就很明显看到了入口, ...

最新文章

  1. Python零基础入门(3)——常用操作符介绍
  2. Elk5安装X-Pack
  3. 【转载】 详细介绍Flex中操作XML
  4. c#winform控件过多卡顿问题解决方案
  5. opencv利用矩形框选中某一区域_【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4
  6. 反射与二次加工标准类型
  7. Mac与centos的ip配置
  8. 一起来学SpringBoot | 第四篇:整合Thymeleaf模板
  9. ping 命令_命令PING背后发生了什么,记得Windows XP拒绝利用PING命令通信吗
  10. oracle 解释计划权限,ACL的使用:主机权限规划管理--Oracle脚本
  11. 开始Azure之旅,参加深度培训 (转)
  12. java虚拟机结构图解(堆栈方法区)
  13. vue+element 压缩上传图片
  14. [车联网安全自学篇] ATTACK安全之交互式/非交互式Shell和登录式/非登录式Shell的检测
  15. 09|自研or借力(下):集成Gin替换已有核心
  16. TPO “Java运行环境未找到”
  17. 查询Mysql版本号的两种方法
  18. 算符优先算法java实现,算符优先算法
  19. 电阻组合c语言程序,【C语言及程序设计】项目1-4-2-2:计算并联电阻
  20. 在SpringBoot中添加发送邮件功能

热门文章

  1. excel乘法公式怎么输入_精选43个Excel表格的操作技巧| 推荐收藏
  2. 在java中产生随机数_在Java中产生随机数的两个方法
  3. Unity项目文件夹结构
  4. 在mybatis里面取别名
  5. powershell快捷键_使用键盘快捷方式启动powershell脚本
  6. 【渝粤题库】陕西师范大学800008 综合自然地理
  7. matlab矩阵中每一行数除以一个数
  8. python_scrapy_爬虫
  9. 在Spring Boot中使用Spring Security实现权限控制
  10. 关于java的局部知识点总结