我有一个使用标头中定义的块的类,如下所示:
@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(使用前将#替换为@)