block、delegate
1.delegate 运行成本低 block 运行成本高
2.delegate 更安全、不会出现循环引用 可以支持多个方法 但回调返回参数限制于ns类
3.block 系统再带动画 可读性高,只要实现就可以了不用设置代理、实现方法
4.block 本质就是个对象 能当做属性、成员变量传递 afnetworking、gcd都用block
一、block 使用
1.定义 typedef void(^resultBlock)(BOOL success);
返回值 无,block名 resultBlock,参数 success
使用
+(void)saveImageToSandbox:(UIImage *)image
andImageNage:(NSString *)imageName
andResultBlock:(resultBlock)block;
#pragma mark----将照片保存到沙盒
+(void)saveImageToSandbox:(UIImage *)image andImageNage:(NSString *)imageName andResultBlock:(resultBlock)block
{
//高保真压缩图片,此方法可将图片压缩,但是图片质量基本不变,第二个参数为质量参数
NSData *imageData=UIImageJPEGRepresentation(image, 0.5);
//将图片写入文件
NSString *filePath=[self filePath:imageName];
//是否保存成功
BOOL result=[imageData writeToFile:filePath atomically:YES];
//保存成功传值到blcok中
if (result) {
block(result);
}
}
//保存到沙盒中
[SZKImagePickerVC saveImageToSandbox:image andImageNage:imageName andResultBlock:^(BOOL success) {
NSLog(@"保存成功");
}];
2.定义
typedef void(^selectPrcvinceBlock)(CCarNumTableViewCell *);
使用
@property (nonatomic,copy) selectPrcvinceBlock selectPrcvinceBlock;
- (IBAction)selectProvince:(id)sender {
if (self.selectPrcvinceBlock) {
self.selectPrcvinceBlock(self);
}
}
二、delegate 代理
定义
@protocol BackMessageViewDelegate <NSObject>
- (void)clickSaveBtn;
- (void)clickCancleBtn;
@end
使用
@property (nonatomic,weak) id<BackMessageViewDelegate> delegate;
- (IBAction)clickSaveBtn:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(clickSaveBtn)]) {
[self.delegate clickSaveBtn];
}
}
三、notification通知
举例:监听键盘显示、隐藏 移动View的frame使用