我看了关于GCD的文章,有一个例子:

dispatch_queue_t bgQueue = myQueue;
dispatch_async(dispatch_get_main_queue(), ^{
    NSString *stringValue = [[[textField stringValue] copy] autorelease];
    dispatch_async(bgQueue, ^{
        // use stringValue in the background now
    });
});

如果我将该方法放在单击处理程序中(将在自动释放池中调用),我会丢失 stringValue,因为单击事件后自动释放池将被销毁吗?

最佳答案

在那个内部块里面?不,你不会失去那个值(value)。当一个 Objective-C 对象变量(尚未声明为 __block )在块内被引用并被复制时,该对象将被自动保留。当块被释放时,该对象也将被释放。 dispatch_async() 负责复制和释放块。

关于ios - Autoreleasepool 和 dispatch_async,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7927052/

10-13 09:04