使用块(block)传值比较简单,并且用块写出来的代码更为整洁。
代码模拟:
声明文件:
#import <Foundation/Foundation.h>
typedef void (^GBCompletionHandler)(NSData* data, NSError *error);
@interface GBUpload : NSObject
/**
* upload data to some where
*
* @param data which to be upload
* @param completionHandle do some logic when upload finish.
*/
- (void) upload:(NSData*) data completionHandler:(GBCompletionHandler) completionHandle;
@end
实现文件:
#import "GBUpload.h"
@implementation GBUpload
- (void) upload:(NSData*) data completionHandler:(GBCompletionHandler) completionHandle {
NSLog(@"uploading......");
sleep(3);
NSLog(@"upload success");
if (completionHandle) {
completionHandle(data, nil);
}
}
@end
函数调用:
GBUpload *upload = [[GBUpload alloc] init];
[upload upload:nil completionHandler:^(NSData *data, NSError *error) {
if (error) {
NSLog(@"upload failed");
} else {
NSLog(@"upload finish, update UI");
}
}];