在iOS 的设计中,至少存在两种方式的回调实现,一种是delegate,一种是CodeBlocks.
blocks和delegate都含有转发并执行的逻辑;
blocks适合小而常用的逻辑,比如action,animation,
delegate适合重量级的转发,比如UIViewController之间的...,一般一个delegate涉及的接口会比较多。
delegate和block示例
DemoView.h
@protocol DemoViewDelegate <NSObject>
- (void)delegateApiOne:(id)sender;
@property (copy, nonatomic) void (^testBlock)(BOOL success);
@end
@interface DemoView
@property (weak, nonatomic) id<DemoViewDelegate> delegate;
@property (copy, nonatomic) void (^testBlock)(BOOL success);
@end
DemoView.m
@interface DemoView ()
//@property (strong, nonatomic) UIImage* testImage;
@end
@implementation DemoView
#pragma mark - private method
- (void)callDelegateApi:(id)sender {
if ([self.delegate respondsToSelector:@selector(delegateApiOne:)]) {
[self.delegate delegateApiOne];
}
}
@end
ImplementDelegate.m
#import "DemoView.h"
@interface ImplementDelegate () <DemoViewDelegate>
@property (strong, nonatomic) DemoView* demoView;
@end
@implementation ImplementDelegate
#pragma mark - DemoViewDelegate
- (void)refreshBtnDidClicked:(id)sender {
//todo
}
#pragma mark - private method
- (void)callBlock{
demoView.testBlock = ^(BOOL show) {
NSLog(@"result = %d", success);
};
}