ios block语法
2014-02-28 19:20
183 查看
ios中的block语法,给我的第一感觉就是属性传值、方法传值和协议传值的合体。他既可以当作属性和方法来使用,也可以像协议传值一样进行回调。感觉以后做项目不会block都没办法见人,这句话足以证明了block的地位。闲话少叙,下面我们来看block时怎么定义的:
下面我们来举一个例子:
这里输出结果就是:first
下面我们来看一个带参数的:
输出结果就是:hello
还有带参数有返回值类型block:
2,
str
}
这里要注意一种情况,就是下面这种情况:
这里,如果外部变量在block实现时赋值时,需要在变量前加__block。
下面,我们看一下block如何传值:
我们一开始在一个ViewController的.h里声明一个block:
.m文件中需要实现这两个方法:
然后我们在另一个ViewController里定义block并实现:
这样就可以在多个ViewController之间进行传值,方便又简洁。
下面是我自己总结的block的注意事项:
1.block的定义必须有实现
2.两个block之间传值时,记得给等号右边的block进行copy。例:myblock = [youblock copy];
3.对于外部变量在block实现方法中赋值时,需要在变量声明前加__block。
以上就是block的内容。以上内容全部原创,如果有什么错误,欢迎留言指正,谢谢。
返回类型^(block名)(参数类型) = ^(参数类型 参数名,…){ ………… return 返回值; }//block的实现 block名(参数赋值);//block的调用(走这句话时,才会真正走block方法)
下面我们来举一个例子:
//无参无返回值类型block void(^myblock)() = ^(){ NSLog(@"first"); }; myblock();
这里输出结果就是:first
下面我们来看一个带参数的:
void(^myblock)(NSString *) = ^(NSString *str){ NSLog(@"%@",str); }; myblock(@"hello");
输出结果就是:hello
还有带参数有返回值类型block:
NSArray *(^myblock)(int,NSString *) = ^NSArray *(int a,NSString *str){ NSNumber *number = [NSNumber numberWithInt:a];//int类型等无指针加到数组中记得一定要转成NSNumber类型 NSArray *arr = [NSArray arrayWithObjects:number,str, nil]; NSLog(@"arr == %@",arr); return arr; }; myblock(2,@"str");输出结果:arr == {
2,
str
}
这里要注意一种情况,就是下面这种情况:
__block NSInteger a = 10; __block NSString *str1 = @"a"; void(^myblock)(NSString *) = ^(NSString *str){ NSLog(@"%@",str); a = 11; str1 = @"2"; }; myblock(@"str");
这里,如果外部变量在block实现时赋值时,需要在变量前加__block。
下面,我们看一下block如何传值:
我们一开始在一个ViewController的.h里声明一个block:
#import <UIKit/UIKit.h> typedef void(^SecondBlock)(); @interface SecondViewController : UIViewController { SecondBlock _changecolorblock; } @property (nonatomic,copy) SecondBlock secondblock;//一会要把block变量传回到另一个ViewController中 - (void)changecolorwithBlock:(SecondBlock)colorblock; @end
.m文件中需要实现这两个方法:
- (void)changecolor{ _changecolorblock([UIColor redColor]); [self.navigationController popToRootViewControllerAnimated:YES]; } - (void)changecolorwithBlock:(SecondBlock)colorblock{ _changecolorblock = Block_copy(colorblock); }
然后我们在另一个ViewController里定义block并实现:
SecondViewController *second = [[SecondViewController alloc]init]; // second.secondblock = _firstBlock;//属性传block [second changecolorwithBlock:^(UIColor *change){//方法传block [self.view setBackgroundColor:change]; }];
这样就可以在多个ViewController之间进行传值,方便又简洁。
下面是我自己总结的block的注意事项:
1.block的定义必须有实现
2.两个block之间传值时,记得给等号右边的block进行copy。例:myblock = [youblock copy];
3.对于外部变量在block实现方法中赋值时,需要在变量声明前加__block。
以上就是block的内容。以上内容全部原创,如果有什么错误,欢迎留言指正,谢谢。
相关文章推荐
- IOS开发之Block语法
- IOS学习 Block语法的使用:Button、AlertView监听方法改写
- IOS Block语法
- IOS(二)块语法block 的理解与使用
- iOS Block的语法
- IOS开发之Block语法
- iOS 开发OC语言(六) Block语法简介
- UI高级第一课  block语法——iOS学习连载29
- IOS基础_Block语法的简单使用
- iOS开发-Block语法
- iOS Block的基本语法与使用
- IOS程式语法之block的使用掌握
- 第六讲 Block块语法及Block与数组的排序,ios字面量的使用(源代码上传)
- iOS ----Block语法
- iOS Block语法详解
- IOS学习 Block语法的使用:声明、创建、引用局部变量
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(三) Block语法
- 黑马程序员-iOS基础之OC重点语法(Block、Protocol)
- ios开发之Block语法
- iOS Block语法 基础介绍1 浅谈(void(^MyBlock)()=^) oc block