Objective c 目标C:这个代码是什么意思?
在MyViewController.h文件中:Objective c 目标C:这个代码是什么意思?,objective-c,objective-c-blocks,Objective C,Objective C Blocks,在MyViewController.h文件中: @property (nonatomic, copy, nullable, class) void (^saveMetadataSuccess)(MyViewController*const _Nullable myViewController); 在MyViewController.m文件中: void (^saveMetadataSuccess)(MyViewControllerr* const myViewController) = nil
@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
是一个getter,但是MyViewController.saveMetadataSuccess(self)代码>似乎设置了一些东西
有人能启发我吗
谢谢MyViewController。saveMetadataSuccess
是一个getter,它返回一个块,然后使用参数(self)调用该块
这就像一个函数返回另一个函数
另外,您不能只调用MyViewController.saveMetadataSuccess(self)
因为MyViewController.saveMetadataSuccess
可为空,如果MyViewController.saveMetadataSuccess
为空,它将崩溃
您必须先检查MyViewController.saveMetadataSuccess
:
- (void)success {
dispatch_async(dispatch_get_main_queue(), ^{
if (MyViewController.saveMetadataSuccess) {
MyViewController.saveMetadataSuccess(self);
}
});
}注意,将fetch和调用分成两条语句可能会使意图更加清晰。例如:
void(^successBlock)(MyViewController*const)=MyViewController.saveMetadataSuccess;successBlock(self)代码>Getter返回block并执行block get。使用点表示法而不是使用[]
和委托是一种非常奇怪的方式。