gpt4 book ai didi

objective-c - 是否可以扩展现有的 Objective-C block ?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:53 27 4
gpt4 key购买 nike

我有一个使用 header 中定义的 block 的类,如下所示:

@property (readwrite, copy) RequestSucceededBlock succeededBlock;

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

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

最佳答案

假设您正在谈论尝试在仍然调用父类(super class) block 的子类中有一个替换 block ,您不能将 block 注入(inject)现有 block ,但您可以按如下方式伪造它:

// 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;
}

这有点奇怪,虽然 b/c 它假设父类(super class)有一个默认 block 分配给 succeededBlock 您要分派(dispatch)。如果您的问题有不同的用途,请澄清,我会看看是否可以更新。

编辑:将 copy 添加到 iVar

关于objective-c - 是否可以扩展现有的 Objective-C block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8039204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com