block的使用写法

来源:互联网 发布:mac鼠标右键怎么按 编辑:程序博客网 时间:2024/05/29 02:26
block的使用写法专题

1、block作为形参的写法,OC方法和C函数各2种,一共四种
OC方法第一种
第一步:先定义
typedef NSString *(^zcblk)(NSString*);
第二步:用定义的数据类型作为blk类型
-(NSString *)reverseWith1:(zcblk) blk;
OC方法第二种
直接把blk结构定义在参数中
-(NSString *)reverseWith:(NSString *(^)(NSString*)) blk;
C函数第一种
第一步:先定义
typedef NSString *(^zcblk)(NSString*);
第二步:用定义的数据类型作为blk类型
void a(zcblk blk)
C函数第二种
直接把blk定义在参数中
void a1(NSString *(^blk2)(NSString*))

其实以上几种反式本质是一致的,

 第一是C和OC的形参命名格式不同,导致了两种分支

 第二是typedef定义的简洁数据类型和直接在形参上写数据类型的不同,导致了另两种分支。


2、blk作为参数在函数内的调用,注意传参时机,什么时候调用什么时候传参

return blk(str1);

3、blk的typedef定义(起个名)

typedef NSString *(^zcblk)(NSString*);

4、blk变量的定义和赋值

第一种简便法(事先typedef):

        zcblk blk1 = ^(NSString *str){

            return [[NSString alloc] initWithFormat:@"in_blk_%@", str];

        };

第二种直接使用blk结构定义

   NSString* (^blk2) (NSString *str1) = ^(NSString *str1){

            return [[NSString alloc] initWithFormat:@"iiiiii_%@", str1];

        };

5、blk变量作为参数传递
NSString *str2 = [c reverseWith:blk1];


规律总结:
1、返回值不带括号
2、作为类型时,第二部分只有 (^)表示是block数据类型
3、作为形参时,可以使用typedef定义的别名,也可以使用具体结构定义
4、作为方法形参,直接使用(^)作为数据类型,然后接变量名;
     作为函数形参,使用(^变量名)直接定义一个变量名
5、作为类型进行数据定义时,和函数形参方式一致。
可以使用typedef定义的别名,也可以使用具体结构定义即用(^变量名)直接定义一个变量名
6、什么时候使用,什么时候传参。
0 0
原创粉丝点击