您的位置:首页 > 移动开发 > IOS开发

iOS 代码块Block

2013-08-19 17:24 295 查看
代码块的简单申明使用 :

//代码块
也是一种类型

                

        //无返回值  
代码块名   
参数(一个)
       
//申明代码块
       
void (^myBlock)(NSString *s);
       
//代码块赋值
        myBlock = ^(NSString *s){
           
NSLog(@"%@",s);
        };
       
//调用代码块
        myBlock(@"你好
代码块");

        

        

        //有返回值的代码块的申明赋值
       
int(^add)(int a,int b) = ^(int a,int b){
           
return a+b;
        };
       
//调用
       
int sum = add(1,2);
       
NSLog(@"%d",sum);

        

        
       
//代码块做参数
       
//申明
       
int(^blockAdd)(int a,int b);
       
//赋值
        blockAdd = ^(int a,int b){
           
return a+b;
        };
       
//传递代码块名
       
blockCode(blockAdd);

        //直接传递代码块的值
       
blockCode(^(int a,int b){
           
return a-b;
        });

        

        
       
//代码块排序
       
NSMutableArray *mutableArray = [[NSMutableArray
alloc] initWithObjects:@"ADS",@"DSDS",@"FWE",@"CIJKLJ",@"BDGS",
nil];
        [mutableArray
sortUsingComparator:^NSComparisonResult(id x,id y){
           
//升序
           
return [x compare:y];
           
//倒序

            //return -1*[x compare:y];
        }];
       
NSLog(@"%@",mutableArray);

        

        

        // 
代码块中 修改数值
       
__block int c=
10;
       
void(^blockChange)(int a,int b) = ^(int a,int b){

        
     //注意:只有
当 c
是全局变量 局部变量
要定义成__block 才能修改
            c++;
           
NSLog(@"%d",c);
        };
       
//调用
        blockChange(1,2);

        
================================================================================
代码块作为回调
模拟下载MP3例子

#import <Foundation/Foundation.h>

#import "DownLoad.h"

@interface View : NSObject

//数据

@property(assign,nonatomic)int data;

//保存数据
-(void)save;

@end

.m

#import "View.h"

@implementation View
-(void)save
{
   
DownLoad *down = [[DownLoad
alloc] init];

    //代码块的回调    vdata在 downMp3的实现方法中改变了
它的值 
然后再 赋给
属性 data
    [down
downMp3:^(int vdata){
       
self.data = vdata;
    }];
   
NSLog(@"下载了:%d",self.data);
}

@end

DownLoad类

#import <Foundation/Foundation.h>

//定义block类型
typedef
void (^blockDown)(int data);

@interface DownLoad :
NSObject

//-(void)downMp3:(void (^blockDown)(int data))block;
-(void)downMp3:(blockDown)block;

@end
.m

#import "DownLoad.h"

@implementation DownLoad
-(void)downMp3:(blockDown)block
{

     NSLog(@"正在下载数据...");

    //假设从网上下载了
数据1000
   
int data = 1000;

    //代码块回调
把数据传到 View类
    block(data);//说明:1000作为参数传到
   
NSLog(@"完成");
}

@end
main里面

  //代码块作为参数
       
View *view = [[View
alloc] init];
        [view
save];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: