您的位置:首页 > 移动开发 > Objective-C

NSObject--block

2015-11-04 15:53 441 查看
直接以代码形式来讲block 在oc中基本的使用

#import<Foundation/Foundation.h>

intc =
0;

intmain(intargc,
const
char
* argv[]) {

@autoreleasepool {

//block声明格式:返回值类型(^blaock名字)
(形参列表)

int (^myFun)();

//block实现: block 名字=
^(形参列表){};

myFun = ^(){

NSLog(@"这是一个代码块");

return
1;

};

//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收

int a = myFun();//空括号不能少!!

NSLog(@"%d",a);

//有返回值,有形参,声明和实现放一起

int (^myBlock)(inta,
int
b) = ^(inta,
int
b){

return
1+b;

};

//调用

int sum = myBlock(10,20);

NSLog(@"%d",sum);

//返回值类型是字符串NSString *(^名字)(形参列表)

NSString *(^myBlock1) (NSString*s) = ^(NSString*s){

NSLog(@"字符串:%@",s);

return s;

};

myBlock1(@"123");

//有一个局部变量,要在block进行值的改变

__block
int b =
0;

void (^myBlock2)() = ^(){

b++;

};

//有一个全局变量,在block进行值的改变

void (^myBlock3)() = ^(){

c++;

};

}

return
0;

}

block 作为函数参数

block作为形参使用,在函数中使用block方法运算数据

#import<Foundation/Foundation.h>

//block作为函数的参数

//函数返回值类型 函数名(block的声明格式)

voidfun(int(^bsasa)(inta,intb)){

int sum = bsasa(3,2);

NSLog(@"%d",sum);

}

voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){

NSLog(@"---%@",myBlock(s1));

}

intmain(intargc,
const
char
* argv[]) {

@autoreleasepool {

//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致

int (^myBlock) (intc,
int
d) = ^(inta,
int
b){

NSLog(@"--%d,%d",a,b);

return a-b;

};

//函数形参是block,调用时,直接传block的名字就行

fun(myBlock);

//调用的另一种方式:内联

//内联block格式:^返回值类型(形参列表){}

fun(^int(inta,
int
b) {

return a*b;

});

fun1(^NSString*(NSString*s)
{

return s;

},
@"123");

}

return
0;

}

block[b]作为方法的参数[/b]

Person.h
#import<Foundation/Foundation.h>

//使用typedef声明block:typedef返回值类型
(^名字)(形参列表)

typedefint
(^myblockType)(int a);

@interface Person :NSObject

//block作为方法的参数:(返回值类型
(^)(形参列表))参数名(blcok名字)

-(void)myblock:(int
(^)(int a))block;

-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1;

-(void)useblockType:(myblockType)sss;

-(void)myname:(NSString
*)name;

@end
Person.m
#import"Person.h"

@implementation Person

-(void)myblock:(int
(^)(int))block{

int a = block(10);

NSLog(@"%d",a);

}

-(void)sengStr:(NSString
*)name andblock:(NSString *(^)(NSString
*))myblock1{

myblock1(name);

}

-(void)useblockType:(myblockType)sss{

int res = sss(10);

NSLog(@"---%d",res);

}

-(void)myname:(NSString
*)name{

NSString *str = [namestringByAppendingString:@"+-"];

NSLog(@"%@",str);

}

@end

main.m
#import<Foundation/Foundation.h>

#import"Person.h"

int main(int
argc, constchar
* argv[]) {

@autoreleasepool {

Person *p = [[Personalloc]init];

[p sengStr:@"尚德"andblock:^NSString
*(NSString *s) {

NSLog(@"我在:%@",s);

return s;

}];//内联形式直接实现block、

[p useblockType:^int(int
a) {//typedef声明

return a;
}];

//传入一个名字,然后进行拼接,名字--;

[p myname:@"aa"];//

[p sengStr:@"aa"andblock:^NSString
*(NSString *s) {//

return [sstringByAppendingString:@"--"];

}];

}

return0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: