首页 > 其他 > 详细

Block语法

时间:2014-01-16 20:47:47      阅读:333      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣
#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;
}
bubuko.com,布布扣

  


 

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


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

AppleProduct.h

bubuko.com,布布扣
typedef int(^Block)(int);//定义了Block的类型,用Block就可以声明变量

@interface AppleProduct : NSObject

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

@end
bubuko.com,布布扣

AppleProduct.m

bubuko.com,布布扣
#import "AppleProduct.h"

@implementation AppleProduct

-(void)openApp:(Block )aBlock
{
    int c = aBlock(20);
    NSLog(@"c = %d",c);
}
@end
bubuko.com,布布扣

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

原文:http://www.cnblogs.com/huen/p/3518720.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!