是否可以扩展现有的 Objective-C 块?

2024-06-19

我有一个使用标头中定义的块的类,如下所示:

@property (readwrite, copy) RequestSucceededBlock succeededBlock;

该物业succeededBlock已经设置了一个块。有没有办法用另一个仍然调用原始块的块来覆盖这个块,类似于类继承?

我认为这是不可能的,因为应该使用类继承来表达类似的东西。还可以吗?


假设您正在谈论尝试在仍调用超类块的子类中使用替换块,则您无法将块注入现有块中,但可以按如下方式伪造它:

// in MySubclass.h
@property (nonatomic, copy) RequestSucceededBlock subclassSucceededBlock;

// in MySubclass.m
- (RequestSucceededBlock)succeededBlock
{
    [return subclassSucceededBlock];
}

- (void)setSucceededBlock:(RequestSucceededBlock)newSucceededBlock
{
    // make sure this conforms to the definition of RequestSucceededBlock
    RequestSucceededBlock combinedBlock = ^{
        dispatch_async(dispatch_get_current_queue(), newSucceededBlock);
        dispatch_async(dispatch_get_current_queue(), [super succeededBlock]);
    };
    subclassSucceededBlock = combinedBlock;
}

这有点奇怪,因为它假设超类有一个分配给的默认块succeededBlock您想要发送的内容。如果您的问题有不同的用途,请澄清,我会看看是否可以更新。

编辑:添加copy to iVar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以扩展现有的 Objective-C 块? 的相关文章

随机推荐