博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS Block(一)
阅读量:5330 次
发布时间:2019-06-14

本文共 1324 字,大约阅读时间需要 4 分钟。

Block使用总结:

1、格式: ReturnType (^ BlockName)(参数…);

//例: int (^ BFunc) (int a, int b);

2、block赋值:

block名 =^(){};

3、定义

3.1 先定义后赋值

int (^ myBlock4)(int a,int b) = NULL; // 有返回值myBlock4 = ^(int a ,int b){    return a+b;};

3.2 block的定义:

//例(1)int (^block_func1)(int,int) = ^(int a,int b){    return a+b;};//例(2)void (^block_func2)(int)=^(int a){    NSLog(@"%i",a);};//例 (3)NSString *(^block_func3)(void)=^(){    return @"测试无参有返回值的block";};

3.2 

(1)使用typedef 给block取别名

typedef int(^MyBlock)(int a,int b);//使用时MyBlock = ^(int a,int b) {      return a+b;  };

(2)若想再在"block内"使用"block外"定义的变量,需要使用 __block 修饰

__block int sum = 0;MyBlock myblock3 = ^(int a,int b) {     sum = a+b;     return 10;};int c = myblock3(2,2);NSLog(@"sum = %i,c = %i", sum, c);

4、block做属性

typedef void (^ReturnSelectedCityName)(NSString * name);@interface LXBAddCityVC : UIViewController@property(nonatomic,strong)ReturnSelectedCityName selectedCityName;//arc下使用strong,编译器会自动将其复制到堆上;MRC下使用copy,将其复制到堆上@end //使用时: LXBAddCityVC *addVC = [[LXBAddCityVC alloc]init];
addVC.selectedCityName = ^(NSString *name){
   //block代码 };

5、block与代理

区别:使用block,不需要定义代理,也可以完成传值,且是"一对多"。

使用代理,需要遵守协议,然后实现代理中的一些方法,代理是"一对一"的。

例如:@property(nonatomic,weak)id<Delegate> delegate; //代理

@property(nonatomic,strong)Myblock mybock;

 

转载于:https://www.cnblogs.com/snowcoming/p/5409428.html

你可能感兴趣的文章
Spring Boot参考教程(二)SpringBoot特性
查看>>
Hibernate 延迟加载剖析与代理模式应用
查看>>
基础小总结
查看>>
第18章:MongoDB-聚合操作--聚合管道--$sort
查看>>
免费试用谷歌的翻译接口
查看>>
【应用】SVG动态 时钟
查看>>
Centos7防火墙配置
查看>>
如何干净的卸载docker
查看>>
Python基础学习笔记(八)
查看>>
世界上最便宜的10张防癌处方
查看>>
隐语义模型LFM(latent factor model)
查看>>
[转载]中情局数千份机密文档泄露:各种0day工具、恶意程序应有尽有
查看>>
手动编译高速扫描器MasScan
查看>>
JS学习笔记-OO创建怀疑的对象
查看>>
windows 开启管理员权限
查看>>
FastStone Capture(FSCapture) 注册码
查看>>
IF函数+While函数+For循环
查看>>
SQL删除重复数据只保留一条
查看>>
原生JavaScript第五篇
查看>>
20162306 2017-2018-1 《程序设计与数据结构》第3周学习总结
查看>>