block 的修饰词 是copy
@property (copy ,nonatomic)
修改block 内部的变量 需要用
__block 去修饰
__blcok int value = 1;
block使用
/**
* 定义了一个block
2个string 就是参数
*/
typedef
void(^stringType)(NSString
*string1,NSString
*string2);
//对block的事件处理 block包含2个参数
-(void)returnString:(stringType)block
{
NSString *string = @"string1";
NSString *string2 = @"string2";
block(string,string2);
{
NSString *string = @"string1";
NSString *string2 = @"string2";
block(string,string2);
}
//调用block ,block 里面传递了2个参数,在调用block的时候 接受block传递过来的参数
[self
returnString:^(NSString
*string1,
NSString *string2) {
//block的返回结果输出
NSLog(@"返回的字符串= %@,%@",string1,string2);
}];
2016-04-14 11:10:12.890 block[1427:67291]
返回的字符串= string1,string2
block 类型
void
(^blockName)() = ^(){
NSLog(@"这是一个没有参数的block");
};
blockName();
void(^blockName1)(NSString *string1,NSString *string2) = ^(NSString *str,NSString *str2){
NSLog(@"string = %@,%@",str,str2);
};
blockName1(@"value1",@"value2");
int (^blockName3)(NSString *string) = ^(NSString *str){
return [str intValue];
};
NSLog(@"返回值为int 的block%d",blockName3(@"10"));
BOOL (^returnBool)() = ^(){ return YES; };
if (returnBool) {
NSLog(@"yes");
NSLog(@"这是一个没有参数的block");
};
blockName();
void(^blockName1)(NSString *string1,NSString *string2) = ^(NSString *str,NSString *str2){
NSLog(@"string = %@,%@",str,str2);
};
blockName1(@"value1",@"value2");
int (^blockName3)(NSString *string) = ^(NSString *str){
return [str intValue];
};
NSLog(@"返回值为int 的block%d",blockName3(@"10"));
BOOL (^returnBool)() = ^(){ return YES; };
if (returnBool) {
NSLog(@"yes");
}
2016-04-14 10:57:17.806 block[1391:61538]
这是一个没有参数的block
2016-04-14 10:57:17.807 block[1391:61538] string = value1,value2
2016-04-14 10:57:17.807 block[1391:61538] 返回值为int 的block10
2016-04-14 10:57:17.807 block[1391:61538] string = value1,value2
2016-04-14 10:57:17.807 block[1391:61538] 返回值为int 的block10
2016-04-14 10:57:17.807 block[1391:61538] yes
返回参数 block
声明
-(void)addressResult:(void(^)(NSString
*string))block;
实现
-(void)addressResult:(void
(^)(NSString
*))block
{
str = [[NSString
alloc]init];
block(str); //这个就是返回的参数
}
调用
[address
addressResult:^(NSString
*string) {
[self
payErrorOrSuccessReturnBackGround:string];
}];
block
//typedef
定义类型 arguments
参数
//typedef <#returnType#>(^<#name#>)(<#arguments#>);
系统带的block
块
动作
typedef
void(^sayhello)();
@interface
alert ()<UIAlertViewDelegate>
{
sayhello hello;
}
-(void)sayHello:(NSString
*)message action:(void(^)())act1 action2:(void(^)())act2;
+(void)getDeviceIDMessage:(void (^)())backFunction;
+(void)getDeviceIDMessage:(void (^)())backFunction
{
backFunction();
} [functionFile getDeviceIDMessage:^{
NSLog(@"哈哈哈");
}]; 这个是不是就是 用了block 方法