iOS block 循环引用

 
@interface ToolDemoViewController ()
{
   
BOOL isSuccess;
    void (^testBlock2)(NSString *str);
}
@property ( strong , nonatomic ) NSString           *testName;
@property ( nonatomic , copy ) void (^testBlock)( NSString *str);
 
#pragma mark - 测试循环引用
- ( void )testWeakAction {
   
   
// 这里不需要 __weak
    [
UIView animateWithDuration : 0.3 animations :^{
       
self . view . backgroundColor = [ UIColor redColor ];
       
self . testName = @"sadgf" ;
    }];
   
// 这里不需要 __weak
   
dispatch_async ( dispatch_get_main_queue (), ^{
       
self . view . backgroundColor = [ UIColor blueColor ];
       
self . testName = @"dddd" ;
    });
   
   
// 这里需要 __weak
   
__weak typeof ( self ) wSelf = self ;
   
testBlock2 = ^( NSString *str) {
       
NSLog ( @"===%@" ,wSelf. testName );
    };
   
   
// 测试调用
   
if ( self . testBlock ) {
       
self . testBlock ( @" 测试 " );
    }
   
if ( testBlock2 ) {
       
testBlock2 ( @"ddd" );
    }
 
  void (^testTempBlock) ( NSString * str);
   
// 这里不需要 __weak
    testTempBlock = ^(
NSString *str) {
       
NSLog ( @"%@" , self . testName );
    };
   
// 测试方法里面的 block 的调用
   
if (testTempBlock) {
        testTempBlock(
@"xiao" );
    }

    // block里面有延迟的时候需要特殊处理

    self.testBlock = ^(NSString *str) {

    ToolDemoViewController *strongSelf = wSelf;

      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

          // 页面返回上个页面后,才执行,就会为空了。。。

          NSLog(@"name111===%@,,,%@",strongSelf.testName,str);

      });

    };

    if (self.testBlock) {

        self.testBlock(@"xiaoming");

    }

 

}
 
 
Tip: 自己开发了好玩的APP: 《小明搜索》(App Store上搜索:"小明搜索")
[点击下载 "小明搜索"](https://itunes.apple.com/cn/app/小明搜索/id1378798470?l=en&mt=8)
1、集必应、百度、搜狗为一体的搜索平台
2、用户随意收藏或添加自己喜欢的网站
3、网页文字播放功能
4、收藏网页的视频,本地播放
5、附加常用小工具
6、后台播放网页音频
7、3D Touch提供便捷入口
完全自定义的搜索助手,简约的爱不释手~
该APP不断完善中~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值