美文网首页
IOS开发工作经验之谈

IOS开发工作经验之谈

作者: iOS小丸子 | 来源:发表于2018-03-27 17:02 被阅读2次

1.在Block中一起使用weakSelf与strongSelf的含义

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

#defineLRWeakSelf(type)  __weak typeof(type) weak##type = type;

#defineLRStrongSelf(type)  __strong typeof(type) type = weak##type;

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

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

}; 

shop.myBlock();

LRWeakSelf(shop);与LRStrongSelf(shop);一起使用

LRShop *shop = [[LRShop alloc]init];

shop.string= @"welcome to our company";//弱引用

LRWeakSelf(shop);   

shop.myBlock = ^{

//强引用

LRStrongSelf(shop)  ;      

NSLog(@"%@",shop.string);   

};   

shop.myBlock();

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

Log.png

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

//弱引用

LRWeakSelf(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();

Log.png

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

//弱引用

LRWeakSelf(shop);

    shop.myBlock = ^{

//强引用

LRStrongSelf(shop)   ;   

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{            NSLog(@"%@",shop.string);     

  });   

};   

shop.myBlock();

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

相关文章

  • IOS开发工作经验之谈

    1.在Block中一起使用weakSelf与strongSelf的含义 我们都会声明一个弱引用在block中使用,...

  • iOS 转让App(更换开发者账号)

    前言 作为一个iOS开发者,多年的工作经验有的不仅仅是技术的提升,还有就是真正的经验之谈了,从业几年,很高兴遇到现...

  • 开始博客之旅

    本人自工作以来从事这软件开发工作,包括Java Web开发,Android应用和iOS应用开发工作。无论是工...

  • 抛砖引玉:初学Python简单区别iOS

    先说一下我是个iOS开发程序员,14年就开始接触iOS开发,大学还没毕业就去上海一直从事的也是iOS开发工作,中间...

  • iOS 开发小经验

    iOS 开发中你是否遇到这些经验问题(一)iOS 开发中你是否遇到这些经验问题(二)iOS 日常工作之常用宏定义大全

  • 学习服务端开发

    从2014年暑假开始学习iOS开发,11月份找到第一份iOS开发的工作,至今也有近三年的时间了,对iOS开发也算是...

  • iOS App 签名的原理

    作者:bang,iOS 开发者,JSPatch 作者,做过推特中文圈和一些 iOS 独立应用,曾在腾讯工作,开发 ...

  • IOS布局框架

    IOS界面开发利器 --- FlexLib 前言 做过几年IOS开发的都会有这样一种感觉,就是界面适配工作越...

  • 滴滴iOS岗位信息

    iOS开发工程师(新业务线) 工作地点:北京 工作职责: 1. 负责iOS客户端产品的架构设计、功能开发; 2. ...

  • iOS开发优秀博客和软件推荐

    iOSBlogAndTools iOS开发优秀博客和软件推荐 iOS开发中文博客 iOS开发工具 iOS开发网站 ...

网友评论

      本文标题:IOS开发工作经验之谈

      本文链接:https://www.haomeiwen.com/subject/ekyscftx.html