Autoreleasepool和dispatch_async

时间:2011-10-28 08:51:29

标签: ios grand-central-dispatch nsautoreleasepool

我阅读了有关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
    });
});

如果我将该方法放在click处理程序中(将在autoreleasepool中调用),我是否会丢失stringValue,因为autoreleasepool将在点击事件后被销毁?

1 个答案:

答案 0 :(得分:9)

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