gpt4 book ai didi

objective-c - 可以访问自身并在整个实例中使用的 block

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:50 24 4
gpt4 key购买 nike

我想要一个在整个类中都可用的 block ,以便实例中的不同方法可以多次重复使用它。

我希望那个 block 能够引用自己。

我不想让 block 通过保留 self 来创建任何讨厌的保留循环。

到目前为止,我很难过。我设法在任何方法定义之外的 .m 中创建 block ,这让我中途 - 我可以在任何地方重用该 block ,但我无法访问自己。我尝试将 block 放入 ivar,但我在那里做错了,现在我得到随机 EXC_BAD_ACCESS。有人可以逐行简单地解释一下吗?

最佳答案

尝试以下操作:

typedef void (^MyBlock)();

@implementation MyClass
{
MyBlock block;
}

- (id) init
{
self = [super init];
if (!self)
return nil;

__block MyClass* _self = self;

block = [^ {
[_self sendSomeMsg];
} copy];
}

注意 __block 存储类型。引用 this :“在函数级别是 __block 变量。这些在 block (和封闭范围)内是可变的,并且如果任何引用 block 被复制到堆中,它们将被保留。”

关于objective-c - 可以访问自身并在整个实例中使用的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773125/

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