码迷,mamicode.com
首页 > 其他好文 > 详细

block的常见用法

时间:2016-01-16 20:52:31      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

一、声明和定义

1、声明

声明方式:返回值(^block)(参数)。声明时,参数变量名可以省略;使用时,参数变量名不能省略,不然会无法调用传入的参数

void(^block)();    
void(^block)(int);
int(^block)(int);

 

 2、定义

  • 无参无返回值。可以省略写
void(^block)() = ^{};
void(^block)() = ^(){};
  • 有参无返回值。
void(^block)(int) = ^(int a){};
  • 有参有返回值。返回值可以省略,也可以不省略
int(^block)(int) = ^int(int a){};
int(^block)(int) = ^(int a){};

 

二、简单使用场景

保存一段代码,在不同方法中调用

@interface ViewController ()
@property (nonatomic, strong) void(^block)();
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    void(^block)() = ^{   
       NSLog(@"调用Block");      
    }; 
    _block = block; 
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     _block();
}

 

 使用技巧:

     inlineBlock:快速生成block代码

    <#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
        <#statements#>
    };

 

三、逆向传值

在数据来源的第二个文件中,定义一个block变量,放入需要传递的值

#import <UIKit/UIKit.h>
@class modalViewController;

@interface modalViewController : UIViewController
@property(nonatomic,strong)void (^valueBolck)(NSString *value);
@end

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    if (_valueBolck) {
        _valueBolck(@"123");
    }   
    [self dismissViewControllerAnimated:YES completion:nil];
}

 

在modal回来的需接受数据的文件中,导入数据源文件,并接收值

#import "ViewController.h"
#import "modalViewController.h"

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    modalViewController *mVC = [[modalViewController alloc]init];
mVC.valueBolck = ^(NSString *value){ NSLog(@"%@",value); };
[self presentViewController:mVC animated:YES completion:nil]; }

 四、属性

1、MRC下的block

  • 情形一:如果block没有访问外部的局部变量,或者访问的外部局部变量被static修饰过,那么block默认存在于全局区(Global)。可以retain,可以copy。copy后依然存在全局区中
  • 情形二:如果block访问外部的局部变量,那么block存放在栈中。此时,如果block声明为成员变量,不能使用retain,因为此时依然放在栈里面,会自动销毁。需要用copy声明。此种情况下copy后的block,放在堆(Malloc)里面。

 

肚子疼,歇会儿再写

 

block的常见用法

标签:

原文地址:http://www.cnblogs.com/xiao-xiao-/p/5136161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!