Block语法

Block语法是IOS4.0+引进的,类似于函数指针的语法。

  1. Block最大的特征作用:Block可以在函数中声明、实现。
  2. 它对局部变量只读。通过__block或static 修饰变量改为可读写。
  3. Block可以作另一个Block函数的参数(用作回调)。或函数返回值(不常用)。
  4. Block有2种写法。可写成单行。

int (^aBlock)(int,int);

aBlock = ^(int a,int b) { return a + b; };


 

int (^aBlock)(int,int) = ^(int a,int b) { return a + b; };

调用:aBlock(10,4);


 

AppDelegate.m

Block语法
#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    //block定义,最好命名中又Block
    int (^aBlock)(int,int);
    //相当于函数实现
    __block int num = 10;
    aBlock = ^(int a,int b)
    {
        num++;//对局部变量只读,通过__block或static 修饰变量改为可读写
        return a + b+num;
    };
    
    int c = aBlock(10,4);
    NSLog(@"c = %d",c);
    
    [self.window makeKeyAndVisible];
    return YES;
}
Block语法

  


 

ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。


Block可以作另一个Block函数的参数-回调例子

AppleProduct.h

Block语法
typedef int(^Block)(int);//定义了Block的类型,用Block就可以声明变量

@interface AppleProduct : NSObject

-(void)openApp:(Block )aBlock;//这里的aBlock是一个typedef里形式的Block函数

@end
Block语法

AppleProduct.m

Block语法
#import "AppleProduct.h"

@implementation AppleProduct

-(void)openApp:(Block )aBlock
{
    int c = aBlock(20);
    NSLog(@"c = %d",c);
}
@end
Block语法

AppDelegate.m

AppleProduct *iphone = [[AppleProduc alloc]init];
    int(^aBlock)(int) = ^(int a){return a+1;};
    [iphone openApp:aBlock];

 

 


block 应用

  假设我们熟悉代理递值的话,对代理我们可能又爱有恨!我们先建立模型A页面 push B页面,如果把A页面的值传递到B页面,属性和单例传值可以搞定!但是如果Pop过程中把B页面的值传递到A页面,那就可以用单例或者代理了!说到代理,我们要先声明协议,创建代理,很是麻烦。常常我们传递一个数值需要在两个页面间写很多代码,这些代码改变页面的整体顺序,可读性也打了折扣。所以,此时,block是一种优化方案!

Block语法

上一篇:ECS使用体验报告


下一篇:pyphon 将文件数据改成浮点型