我阅读了有关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将在点击事件后被销毁?
答案 0 :(得分:9)
在那个内部区域内?不,你不会失去这个价值。当一个块内引用一个Objective-C对象变量(尚未声明为__block
)并复制该块时,该对象将自动保留。释放块时,该对象也将被释放。 dispatch_async()
负责复制和释放块。