Objective c 目标C:这个代码是什么意思?

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

在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
是一个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。使用点表示法而不是使用
[]
和委托是一种非常奇怪的方式。