Objective-C:这段代码是什么意思?

时间:2017-12-06 14:50:01

标签: 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;

+ (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);似乎设定了一些东西。

有人可以启发我吗?

由于

1 个答案:

答案 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);
        }
    });

}