gpt4 book ai didi

objective-c - Objective-C - 对父类(super class)的弱引用?

转载 作者:太空狗 更新时间:2023-10-30 03:17:59 24 4
gpt4 key购买 nike

我正在尝试调用 block 内父类(super class)的方法。为了避免保留循环,我需要对 super 的弱引用。我如何获得对 super 的弱引用?

[self somethingWithCompletion:^(){
[super doStuff];
}];

我尝试了以下但给出了编译错误。

__weak MySuperClass *superReference = super;

最佳答案

你可以定义一个辅助方法

-(void) helperMethod
{
[super doStuff];
// ...
[super doOtherStuff];
// ...
}

然后做

__weak MyClass *weakSelf = self;
[self somethingWithCompletion:^(){
MyClass *strongSelf = weakSelf;
[strongSelf helperMethod];
}];

使用运行时方法的直接解决方案如下所示:

__weak MyClass *weakSelf = self;
[self somethingWithCompletion:^(){
MyClass *strongSelf = weakSelf;
if (strongSelf) {
struct objc_super super_data = { strongSelf, [MyClass superclass] };
objc_msgSendSuper(&super_data, @selector(doStuff));
}
});

缺点(我认为):

  • 更多(复杂)代码。
  • 根据“Objective-C Runtime Programming Guide”,你不应该调用消息传递功能直接在您的代码中。
  • 根据方法的返回类型,您必须使用 objc_msgSendSuperobjc_msgSendSuper_stret
  • 对于带参数的方法,您必须将 objc_msgSendSuper 转换为正确的函数类型(感谢@newacct)。

关于objective-c - Objective-C - 对父类(super class)的弱引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573316/

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