OC中GCD的某些方法調(diào)用非常的方便,對象或類名就可以調(diào)用, 比如以下:
dispatch_async(dispatch_get_main_queue(), ^{
});
這是C語言寫的函數(shù),在C語言函數(shù)中使用對象或者是類去調(diào)用OC的方法是沒有問題的,但是我需要的是self來調(diào)用洼怔,而c不識別self關(guān)鍵字,所以可以聲明一個靜態(tài)的變量行施,讓其指向當(dāng)前類的對象即可。
以下為解決方法:
先在類的.h文件中聲明函數(shù)
/** 返回完成的回調(diào) 函數(shù)聲明 */
extern void backCompletionHandle(void(^ _Nullable backCallBack)());
在.m文件實現(xiàn)函數(shù)
// 由于在C函數(shù)中無法直接調(diào)用OC當(dāng)前對象的self凌净,那么我們可以在.m聲明一個靜態(tài)變量悲龟,讓這個變量指向當(dāng)前對象
static id obj;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
obj = self;
}
// 函數(shù)實現(xiàn)
void backCompletionHandle(void(^backCallBack)()) {
[obj backCompletionHandle:backCallBack];
}
這樣在外界調(diào)用就非常方便了屋讶,
- (void)backEvent:(UIButton *)btn {
backCompletionHandle(^{
[[[UIAlertView alloc] initWithTitle:@"已退出" message:nil delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil] show];
});
}