ios block之理解
来源:互联网 发布:淘宝企业店可以贷款吗 编辑:程序博客网 时间:2024/04/29 17:39
二:基本语法
Block可以看成一个语句块或者是很多时候当做匿名函数来使用。
- (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0); // delay = 0.0, options = 0, completion = NULL
- [ UIView animateWithDuration:10 animations:^{
- NSLog(@"%@,",@"block");
- }];
简单以这句函数来看。
animations参数接受一个block函数块。我们直接可以^{};来书写这个block。
然后看上面函数申明,我们看到animations接受的参数是这么申明的 (void(^)(void))animations;
这个也好理解,我们知道参数都需要一个申明一个类型比如
(NSTimeInterval)duration。(void(^)(void))其实就是block的一种常见格式的申明。里面还需要分为 :
第一个void是指的是block函数无返回,即{}执行玩没有返回值。(^)是固定规范,表明这是个block类型的。后面的()里表示block接受参数
当然,这边是(void)我们知道,不接受参数。
官方截图如下:
1.如何申明一个block函数
int(^testBlock)(int a,int b);
返回值类型 (^block名字)(传入参数)
2.OC申明一个带有block参数的函数
-(void)textF:(Bool (^)(id a,id b)) bBlock;
这个就如我们上面看到animations,基本和申明很类似,就是名称换到外面去了。
(返回类型 (^)(传入参数))block形参名
然后发现用C代码申明方法时:
void
dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t));
3.申明后实现一个block函数块
^(int a,int b){
//code;
}
- extern NSInteger CounterGlobal;
- static NSInteger CounterStatic;
- {
- NSInteger localCounter = 42 ;
- __block char localCharacter;
- void (^aBlock)( void ) = ^( void )
- {
- ++ CounterGlobal ; //可以存取。
- ++ CounterStatic ; //可以存取。
- CounterGlobal = localCounter; //localCounter在block 建立时就不可变了。
- localCharacter = 'a' ; //设定外面定义的localCharacter 变数。
- };
- ++localCounter; //不会影响的block 中的值。
- localCharacter = 'b' ;
- aBlock(); //执行block 的内容。
- //执行完后,localCharachter 会变成'a'
三、页面之间的回调block,更新ui:
OneViewController.m
UILabel *label1 = (UILabel *)[self.view viewWithTag:1001]; TwoViewController *two = [[TwoViewController alloc]init]; [self.navigationController pushViewController:two animated:YES]; __block int test = 0;//如果不加_block会报错 two.block = ^(NSString *str){ label1.text = str; test = 1; }; two.block(@"222"); NSLog(@"---> %d",test); [two release]; [label1 release];
TwoViewController.h
#import <UIKit/UIKit.h>typedef void (^aBlock)(NSString *str);@interface TwoViewController : UIViewController<UITextFieldDelegate>@property (nonatomic, copy)aBlock block;@end
TwoViewController.m
block(textField.text);//回调更新OneViewController中的label1 UI
- ios block之理解
- ios开发-block理解
- iOS block 个人理解
- iOS block的理解
- IOS block 练习题 强化理解block
- iOS 对于block的理解
- iOS笔记-(Block的理解)
- iOS闭包block理解
- iOS 对于block的理解
- IOS之Block使用
- ios学习之block
- IOS 之Block编程
- iOS 学习之 Block
- iOS之block
- iOS 之Block详解
- iOS 笔记之 Block
- IOS之Block详解
- iOS 之 block
- adt 和 sdk升级到最新后,创建新项目有问题,解决方法
- AsyncTask后台线程的简单应用(进度条更新显示)
- 如何在Xcode中安装cocos2d
- 启动服务的命令
- MySQL日期时间函数大全
- ios block之理解
- WAMP设置通过IP地址访问
- iOS多线程编程
- Java 通过Poi解析数据到EXCEL
- Emacs在RHEL 5上的安装和使用
- Qt无法调试的问题
- View Controller 生命周期的各个方法的用法
- To compare two nanoTime values ,不解,先记下
- POJ3348 凸包面积计算