• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > oc循环引用问题

oc循环引用问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了oc,λoc显示屏亮度调整,人oc液晶显示器,oc奶粉,斯蒂卡oc等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: oc循环引用问题
描述:

遇到一个问题:
这样写会导致循环引用,好理解:
    self.block = ^{
        NSLog(@"%@", self.ob1);
    };
但是这样就obj1能正常释放了,理解不了:
    BlockOb *tempOb = self.ob1;
    
    self.block = ^{
        NSLog(@"%@", tempOb);
    };
谁帮忙解析一下!(BlockOb是继承NSobject,仅重写了dealloc, ob1时BlockOb对象)


解决方案1:

 oc循环引用问题

解决方案2:

没有在block块内部声明的变量对于block来说都叫做外部变量,对于外部变量,如果是常量,在运行block块的时候会直接将值拷贝过来,如果是对象,block会使用强引用直接捕获这个对象,即拥有了这个对象。


self.block = ^{
        NSLog(@"%@", self.ob1);
};

这段代码,编译器会将代码块中的self.ob1看作是self->ob1,block会捕获你的self而不是ob1,这个是规则。
你自身就拥有这个block作为实例变量,又在这个block中强引用self,自然就是强引用循环了。
要想改写的话,楼上说的不全面,不仅要在block外改变self为弱引用,还要防止弱引用的对象随时被释放而使用局部强引用。

__weak Class * weakSelf = self;
self.block = ^{
        Class * innerSelf = weakSelf;
        NSLog(@"%@", self.ob1);
};

不知理解了没有。。。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 真机测试,clang:error:linkercommandfailedwithexitcode1use-vtoseeinvocat
  • iOS,我在Githubfork别人的仓库后更改了代码,可以用CocoaPods把我的仓库加入项目里吗?
  • iOS支持“用其他应用打开”,plist中设置DocumentTypes为哪种类型可以同时支持doc/docx?<UTIs>
  • [selfimageUrlArrayenumerateObjectsUsingBlock:,这句代码是是做什么用的?
  • 为什么有的书说在初始化方法和dealloc方法总是应该通过实例变量来读写数据?
  • 一句oc代码转成swift
  • ocr软件ios-OCR-Tesseract
  • display:inline-block类方法中使用了block,如何避免循环引用?
  • WEEXstorage模块在iOS端setItem失败
  • 关于GCDAsyncUdpSocket接受到数据后address参数怎么转码成服务器ipip

相关文章

  • 2017-06-05 请问下afHttp网络访问怎么添加请求头和指定sessionId
  • 2017-06-05 如何实现中国梦如何实现评论回复多次?
  • 2017-06-05 iOS开发使用Masonry布局如何让父视图的高度随着子视图的变化而变化?
  • 2017-06-05 ipad2ios6到底該不該兼容iOS6?
  • 2017-06-05 张馨予露全乳删除删除怎么删除提交到cocoapods上的框架?
  • 2017-06-05 iosapp开发实现右滑返回上一页和点击栏目条能够返回顶部
  • 2017-06-05 UILabel行距iOS开发:UILabel识别HTML标签
  • 2017-06-05 UICollectionView的头部无法使用pushViewController跳转,如何解决?
  • 2017-06-05 iOS中使用hidesBottomBarWhenPushed,Pop的时候如何显示出TabBar?
  • 2017-06-05 ios开发教程iOS的插件化开发用small如何做?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • iOS登录注销逻辑问题
    • webview加载h5页面底部出现网页端没有的广告怎么解决?
    • weexweex中iOS如何使用加载多个js文件
    • iOS开发中instagram登录后授权不了,在instagram里面不跳回应用
    • byt向接口上传图片需要转换为byte数组
    • iOSApp在后台时接收到推送消息时,怎么去语音播报?
    • OC中Http是不是基于socket的?
    • AVOS官方的ios-sdk-demo,统计功能出错
    • 讲带有第三方库和xib的文件打包成a静态库,怎么处理
    • ios下,avos如何实现仅在wifi情况下上传?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有