在MyViewController.h文件中:
@property (nonatomic, copy, nullable, class) void (^saveMetadataSuccess)(MyViewController*const _Nullable myViewController);
在MyViewController.m文件中:
void (^saveMetadataSuccess)(MyViewControllerr* const myViewController) = nil;
+ (void)setSaveMetadataSuccess:(void (^)(MyViewController* const))newMetadataSaveSuccess {
saveMetadataSuccess = [newMetadataSaveSuccess copy];
}
+ (void (^)(MyViewController* const))saveMetadataSuccess {
return saveMetadataSuccess;
}
最后我不明白的方法:
- (void)success {
dispatch_async(dispatch_get_main_queue(), ^{
MyViewController.saveMetadataSuccess(self);
});
}
根据我的理解,saveMetadataSuccess
是一个吸气剂,但MyViewController.saveMetadataSuccess(self);
似乎设定了一些东西。
有人可以启发我吗?
由于
答案 0 :(得分:2)
MyViewController.saveMetadataSuccess
是一个getter,它返回一个块,然后用param(self)调用。
所以它就像一个返回其他功能的函数。
此外,您不能只是致电MyViewController.saveMetadataSuccess(self);
,因为MyViewController.saveMetadataSuccess
可以为空,如果MyViewController.saveMetadataSuccess
为空则会崩溃。
您必须先检查MyViewController.saveMetadataSuccess
:
- (void)success {
dispatch_async(dispatch_get_main_queue(), ^{
if (MyViewController.saveMetadataSuccess) {
MyViewController.saveMetadataSuccess(self);
}
});
}