ios之代码块

oc加入代码块的功能,可以将一块代码当做一个对象来看待,并且传递给其他方法或者函数。代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。脱字符(^)是代码块的语法标记。

下面封装了一个数据下载的代码块:

#import <Foundation/Foundation.h>
typedef void (^ReceiveResBlock)(NSURLConnection *connection, NSURLResponse *response);
typedef void (^ReceiveDataBlock)(NSURLConnection *connection, NSData *data);
typedef void (^ReceiveErrorBlock)(NSURLConnection *connection, NSError *error);
typedef void (^ConnFinish)(NSURLConnection *connection);
@interface MyConnection : NSObject<NSURLConnectionDataDelegate,NSURLConnectionDelegate>{
    ReceiveResBlock _receiveResBlock;
    ReceiveDataBlock _receiveDataBlock;
    ReceiveErrorBlock _receiveErrorBlock;
    ConnFinish _connFinishLoadingBlock;
}


+(MyConnection *)myConnectionWithReceiveRes:(ReceiveResBlock)receiveResBlock ReceiveDataBlock:(ReceiveDataBlock)receiveDataBlock ReceiveErroorBlock:(ReceiveErrorBlock)receiveErrorBlock ConnFinish:(ConnFinish)connFinishLoadingBlock;

-(id)initWithReceiveRes:(ReceiveResBlock)receiveResBlock ReceiveDataBlock:(ReceiveDataBlock)receiveDataBlock ReceiveErroorBlock:(ReceiveErrorBlock)receiveErrorBlock ConnFinish:(ConnFinish)connFinishLoadingBlock;


-(void)sendRequestWithURL:(NSURL *)url;
@end

#import "MyConnection.h"

@implementation MyConnection

-(id)initWithReceiveRes:(ReceiveResBlock)receiveResBlock ReceiveDataBlock:(ReceiveDataBlock)receiveDataBlock ReceiveErroorBlock:(ReceiveErrorBlock)receiveErrorBlock ConnFinish:(ConnFinish)connFinishLoadingBlock{
    if (self = [super init]) {
        _receiveResBlock = receiveResBlock;
        _receiveDataBlock = receiveDataBlock;
        _receiveErrorBlock = receiveErrorBlock;
        _connFinishLoadingBlock = connFinishLoadingBlock;
    }
    return self;
}



+(MyConnection *)myConnectionWithReceiveRes:(ReceiveResBlock)receiveResBlock ReceiveDataBlock:(ReceiveDataBlock)receiveDataBlock ReceiveErroorBlock:(ReceiveErrorBlock)receiveErrorBlock ConnFinish:(ConnFinish)connFinishLoadingBlock{
    MyConnection *conn = [[MyConnection alloc] initWithReceiveRes:receiveResBlock ReceiveDataBlock:receiveDataBlock ReceiveErroorBlock:receiveErrorBlock ConnFinish:connFinishLoadingBlock];
    return conn;
}


-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    _receiveResBlock(connection,response);
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    _receiveDataBlock(connection,data);
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    _receiveErrorBlock(connection,error);
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    _connFinishLoadingBlock(connection);
    
}

-(void)sendRequestWithURL:(NSURL *)url{
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection connectionWithRequest:request delegate:self];
    
}

@end
在代码块中局部变量和全局变量的使用

代码块内的指令可以访问到其他代码都能够访问的全局变量,对于局部变量来说,如果在代码块中改变局部变量的话,需要在局部变量的前面加上关键字__block(block前面是两个下划线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值