block、delegate、notification使用

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使用

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章