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 方法