Autoreleasepool 和 dispatch_async
Posted
技术标签:
【中文标题】Autoreleasepool 和 dispatch_async【英文标题】:Autoreleasepool and dispatch_async 【发布时间】:2011-10-28 08:51:28 【问题描述】:我看了一篇关于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
);
);
如果我将该方法放在点击处理程序中(将在 autoreleasepool 中调用),我会丢失 stringValue,因为 autoreleasepool 将在点击事件后被销毁?
【问题讨论】:
【参考方案1】:在那个内部块里面?不,你不会失去那个价值。当块内引用了 Objective-C 对象变量(尚未声明为 __block
)并复制该块时,该对象将自动保留。当块被释放时,该对象也将被释放。 dispatch_async()
负责复制和释放区块。
【讨论】:
以上是关于Autoreleasepool 和 dispatch_async的主要内容,如果未能解决你的问题,请参考以下文章
@autoreleasepool 在我的场景和 ARC 中是不是有意义?
Autoreleasepool 和 dispatch_async
`objc_autoreleasePoolPush()` 和 `objc_autoreleasePoolPop()` 函数和 `@autoreleasepool` 块