在Block中使用weakSelf与strongSelf的意义

在Block中使用weakSelf与strongSelf的意义

我们都会声明一个弱引用在block中使用, 目的就是防止循环引用,  那么weakSelfstrongSelf一起使用目的是什么呢? 首先先定义2个宏:

#define YXWeakSelf(type)  __weak typeof(type) weak##type = type;
#define StrongSelf(type)  __strong typeof(type) type = weak##type;

在Controller中YXWeakSelf(self)YXStrongSelf(self)一起使用情况很多,为了防止循环引用,还是不懂原因的见如下实例:

我们创建一个shop并且在shop.myBlock代码块中使用弱引用YXWeakSelf(shop)

    LRShop *shop = [[LRShop alloc]init];shop.string = @"welcome to our company";//弱引用YXWeakSelf(shop)shop.myBlock = ^{NSLog(@"%@",weakshop.string);};shop.myBlock();

YXWeakSelf(shop)YXStrongSelf(shop)一起使用

LRShop *shop = [[LRShop alloc]init];shop.string = @"welcome to our company";//弱引用YXWeakSelf(shop);shop.myBlock = ^{//强引用YXStrongSelf(shop)NSLog(@"%@",shop.string);};shop.myBlock();

这2个打印结果都是shop.string有值并且shop也销毁了, 看起来是没什么区别:


仅仅使用YXWeakSelf(shop)并且在myBlock中增加一个延迟3秒在输出就会出现问题, 虽然对象销毁了, 输出的值却是null

//弱引用YXWeakSelf(shop);shop.myBlock = ^{dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{NSLog(@"%@",weakshop.string);});};shop.myBlock();

如果YXWeakSelf(shop)YXStrongSelf(shop)一起使用输出的shop.string有值,对象也销毁了, 我就不再截图给大家看了!

//弱引用YXWeakSelf(shop)shop.myBlock = ^{//强引用YXStrongSelf(shop)dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{NSLog(@"%@",shop.string);});};shop.myBlock();

通过上面一堆的解释, 我们明显发现YXWeakSelf(shop)YXStrongSelf(shop)一起使用的好处, 不但能打印出我想要的值,而且也不会造成循环引用 , 在开发中这两个方法可以根据实际情况进行使用!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统原理之操作系统简介(第一章)

一、 什么是操作系统 操作系统:是一种复杂的系统软件,是不同程序代码、数据结构、数据初始化文件的集合,可执行。 操作系统是用户与硬件之间的接口:操作系统与硬件部分相互作用,并且为运行在计算机上的应用程序提供执行…

数据可视化(BI报表的开发)第二天

9、公用面板样式 所有的面板的基础样式是一致的,提前布局好。 面板 .panel :box-sizing,边框图,大小,定位【51 38 20 132】容器 .inner:padding:24,36,定位外部拉宽标…

关于Xcode 7.3 7.3.1 断点 卡死 无限菊花

关于Xcode 7.3 7.3.1 断点 卡死 无限菊花 只要一打断点,就无限卡死,变量区一直菊花在转,只有强制退出Xcode才能重新编译,找了Google和Stack OvewFlowe依然没有解决办法. 删除项目,重新安装Xcode,重新运行程序一切办法都解决不到,百度上说的"build setting中将Enable Clang…

html5+hbuilder+夜神模拟器+webview

HTML5 Plus应用概述 首先新建一个移动App项目,文件-->新建-->移动APP HTML5 Plus移动App,简称5App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与…

科学计算库学习报告

numpy与matplotlib的学习随笔 我爱代码 import numpy as npimport matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams[font.family]SimHeimatplotlib.rcParams[font.sans-serif][SimHei]labelsnp.array([第一次,第二次,第三次,第四次,第五次,第六次])nAttr6datanp…

数据库系统原理(第二章关系数据库 )

一、关系数据库概述 20世纪80年代后,在商用数据库管理系统中,( 关系模型 )逐渐取代早 期的网状模型和层次模型,成为主流数据模型 SQL3(SQL-99):1999年 SQL2(SQL-92)&…

iOS NSMutableAttributedString常用方法总结

NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体、字号、字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(NSMutableAttributedString&a…

软件开发工具(第1章:绪论)

一、 软件开发工具的由来 计算机语言和软件开发工具的发展和历史 机器语言(第一代语言):难以记忆的、无意义的、二进 制的字符串 汇编语言(第二代语言)针对难以记忆的、无意义的、二进 制的字符串、人们试图用英语中具…

Saiku Table展示数据合并bug修复(二十五)

Saiku Table展示数据合并bug修复 Saiku以table的形式展示数据,如果点击了 非空的字段 按钮,则会自动进行数据合并,为空的数据行以及数据列都会自动隐藏掉。 首先我们应该定位问题: 1.查看接口返回值,会发现接口返回都正…

软件开发工具(第2章:软件开发过程及其组织)

一、软件开发的困难 程序员做好软件工作的关键是什么? 关键是两个转换: 第一个转换是用户对软件功能的理解与程序员对软件功能的理解之间的转换。 (不同⾏业的⼈员对于事物的认识⽅法与描述⽅法是不同的。) 第二个转换要解决的是人…

数据可视化(BI报表的开发)第四天

练习题: 先找出字符串 ‘8587263747153203552943982’ 中出现次数最多的数字及次数,然后去重后并排序(不准使用sort),使得到结果为 ‘0123456789’。 要求1:找到出现最多的数字和出现的次数 // 1、找出出…

网络经济与企业管理(第 1 章:企业管理概论)

一、企业的概念 什么是企业? 1.企业以市场为导向,以价值增值作为经济活动的目的 2.企业是从事商品生产和流通的经济组织 3.企业经营过程中要自主经营、自负盈亏、独立核算和承担风险,具有法人资格的基本经济单位 企业发展的三个时期&#xff…

去死吧!USB转串口!!!

首先,这个题目有两种歧义:1、USB转232串口(严格说就是这种)! 2、USB转USART串口(通常都是这么叫,认为就是这,理论上是错误的,歧义所在)! USB转TTL…

IDEA微服务项目的application.yml没有绿色叶子的解决办法

1.今天在写微服务项目的时候成功入坑,那么问题是啥呢?接下来和我一起走入bug的世界吧,让我们看看究竟是怎么回事。 *问题描述    1.application.yml是灰色的小格子 2.实在难看 *需要解决的最终结果 1.有绿色的小叶子 解决方案上图 1. 2. …

Ajax — 第一天

上网的目的 本质目的:浏览和消费资源 资源:文字、图片、音频、视频…资源存在哪里:服务器上 服务器的概念 是负责存放和对外提供资源的电脑。它的性能比普通的计算机好太多了 客户端 获取和消费资源的电脑,叫做客户端。 我…

Swift傻傻分不清楚系列(四)基本运算符 o_O!???

本页包含内容: 术语赋值运算符算术运算符组合赋值运算符比较运算符三目运算符空合运算符区间运算符逻辑运算符 运算符是检查、改变、合并值的特殊符号或短语。例如,加号()将两个数相加(如 let i 1 2)。更…

网络经济与企业管理(第 2 章:企业战略管理)

一、战略的性质与类型 什么是战略:企业发展的谋划 企业战略的三个层次: 企业总体战略:又称经营战略,是企业整体运营的指导思想事业层战略:又称竞争战略、业务层次战略、SBU战略, 指导具体战略经营单位。职能…

Ajax — 图书管理

注意&#xff1a;本项目基于 jQuery 文件下进行的 Ajax 请求项目&#xff0c;需要映入jQuery文件&#xff01; <body style"padding: 15px;"><!-- 添加图书的Panel面板 --><div class"panel panel-primary"><div class"panel-h…

错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...

在IDEA的使用过程中&#xff0c;经常断掉服务或者重启服务&#xff0c;最近断掉服务重启时突然遇到了一个启动报错&#xff1a; 错误&#xff1a;找不到或无法加载主类 猜测&#xff1a;1&#xff0c;未能成功编译&#xff1b; 尝试&#xff1a;菜单---》Build---》Rebuild Pro…

Ajax — 第二天

Ajax-02 今天内容&#xff1a; 安装浏览器插件 聊天机器人案例 Form表单提交 模板引擎&#xff08;新的概念&#xff0c;难点&#xff09; 两个案例 Chrome浏览器插件安装 安装步骤 下载插件的网站&#xff1a; https://www.gugeapps.net/ 无需扫码 http://www.cnplu…