gpt4 book ai didi

ios - 用嵌套 block 保留 self ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:39 25 4
gpt4 key购买 nike

使用以下代码:

@interface MyClass()
{
NSMutableArray * dataArray;
}
@end

@implementation MyClass

- (void) doSomething
{
__typeof__(self) __weak wself = self;
dispatch_async(dispatch_get_global_queue(0,0), ^{
__typeof__(self) sself = wself;
[sself->dataArray addObject: @"Hello World"];

dispatch_async(dispatch_get_main_queue(), ^{
[NSThread sleepForTimeInterval: 30];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle: sself->dataArray[0]
message: @"Message"
delegate: nil
cancelButtonTitle: @"OK"
otherButtonTitles: nil];
[alert show];
});
});
}

@end
  1. 这是从主队列 block 中访问 sself 的正确方法吗?
  2. sself 是否会在初始队列完成后超出范围?
  3. 我应该在主队列 block 中添加第二个 __typeof__(self) sself = wself; 吗?

最佳答案

  1. 是的,当然是。
  2. 不,您可以在 main_queue block 中使用。
  3. 不,你不必这样做。您不必添加 __typeof__(self) sself = wself; 即使在 global_queue block 中;没必要,你已经有一个弱化的 self 对象 wself (此外,你将在 block 内的 __typeof__(self) 部分保留 self ) .
  4. 您不必使用__typeof__。简单地使用 typeof(self)

关于ios - 用嵌套 block 保留 self ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21579359/

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