gpt4 book ai didi

ios - 引用 block 内的实例变量

转载 作者:可可西里 更新时间:2023-11-01 04:44:24 25 4
gpt4 key购买 nike

假设我有一个类(非 ARC 环境):

@interface SomeObject : NSObject {
UILabel *someLabel;
dispatch_queue_t queue;
}
- (void)doAsyncStuff;
- (void)doAnimation;
@end

@implementation SomeObject

- (id)init {
self = [super init];
if (self) {
someLabel = [[UILabel alloc] init];
someLabel.text = @"Just inited";
queue = dispatch_queue_create("com.me.myqueue", DISPATCH_QUEUE_SERIAL);
}
return self;
}

- (void)doAsyncStuff {
dispatch_async(queue, ^{
...
// Do some stuff on the current thread, might take a while
...
dispatch_async(dispatch_get_main_queue(), ^{
someLabel.text = [text stringByAppendingString:@" in block"];
[self doAnimation];
}
}
}

- (void)doAnimation {
...
// Does some animation in the UI
...
}

- (void)dealloc {
if (queue) {
dispatch_release(queue);
}
[someLabel release];
[super dealloc];
}

如果我的 block 被启动,然后所有其他持有对该对象实例的引用的东西都释放了它,我能保证不会调用 dealloc 吗,因为嵌套 block 引用了一个实例变量(和 self )- - dealloc 会在嵌套 block 退出后发生吗?我的理解是我的 block 对 self 有很强的引用,所以这应该是 kosher。

最佳答案

这很好,原因如您所述。

需要注意的重要一点是,如果类(由 self 表示)以任何方式保留该 block ,您将创建一个保留循环。因为您是在线定义它,并将其传递给 dispatch_async,所以您应该没问题。

关于ios - 引用 block 内的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757911/

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