IOS开发入门之iOS 关于修饰代理用weak还是assign
凌雪 2018-09-10 来源 :网络 阅读 437 评论 0

摘要:本文将带你了解IOS开发入门之iOS 关于修饰代理用weak还是assign,希望本文对大家学ios有所帮助。

本文将带你了解IOS开发入门之iOS 关于修饰代理用weak还是assign,希望本文对大家学ios有所帮助。


iOS 关于修饰代理用weak还是assign
     
     
     
     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。
 
   
   
   
        

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之ios频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程