- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对如何在完成 Grand Central Dispatch I/O channel 后正确处理它感到困惑。以下(简化的)示例导致某些专用调度队列崩溃,并显示消息:LIBDISPATCH 客户端中的错误:对象的过度恢复
:
- (void)beginReading {
dispatch_io_t channel;
channel = dispatch_io_create_with_path(DISPATCH_IO_RANDOM,
"/Path/To/Some/File",
O_RDONLY,
0 /*mode*/,
someQueue,
^(int errorCode) {
// Cleanup handler; executed once channel is closed.
// (Or fails to open.)
});
// Schedule the read operation
dispatch_io_read(channel, 0, SIZE_MAX, someQueue, ^(bool done, dispatch_data_t data, int errorCode) {
NSError *error = (errorCode!=0) ? [NSError errorWithDomain:NSPOSIXErrorDomain code:errorCode userInfo:nil] : nil;
[self didReadChunk:data isEOF:done error:error];
});
// No more read operations to come, so we can safely close the channel.
// (Or can we?)
dispatch_io_close(channel, 0);
// We don't need a reference to the channel anymore
dispatch_release(channel);
}
我猜测 dispatch_io_close()
安排了一些异步操作来关闭 channel ,并且在该操作完成执行之前,您不能调用 dispatch_release()
在 channel 上,否则会发生不好的事情。但这将是相当令人惊讶的:其他 GCD 异步函数,例如 dispatch_async()
,没有此限制。此外,dispatch_io_close()
调用似乎并不是绝对必要的,因为 libdispatch 似乎在 channel 上最后一次调用 dispatch_release()
时关闭了文件。
从这里可以看出,如果您调用 dispatch_io_close
,您必须注意在清理处理程序运行之前不要释放 channel 。这太烦人了,我想知道这是否是一个错误。还是我遗漏了什么?
最佳答案
事实证明这是一个错误(雷达#10246694)。进一步的实验似乎表明它只影响基于路径的调度 channel ,即那些使用 dispatch_io_create_with_path()
创建的 channel ,而不是 dispatch_io_create()
。
关于objective-c - 正确处理 Grand Central Dispatch I/O channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550676/
我正在研究 CSS3 转换。我希望我的问题不会太菜鸟和现实 :) 基本上,每当用户将鼠标悬停在某些元素上时,我都会通过 css 更改文本的颜色。 现在我遇到的问题是:我有一个带有产品名称的 div 框
我想使用 javascript/jquery 获取 #mainChildElement 相对于 .grand-grand-grand-parent 的位置。我尝试执行 $('#mainChildEle
我想使用 flex“系统”来获得看起来像如下图所示,但我的布局 div 和 flex 之间有一些生成的指令: [flex=66]
我正在使用 Lucida Grande 字体系列,它工作得很好。 FontLabel *label4 = [[FontLabel alloc] initWithFrame:CGRectMake(10,
我在解码(孙)子表的元素时遇到问题。这是传入数据的结构: 1 1 text/html theFile.txt
我一直在看this question尝试解决我的问题 here . tl;dr 是我想使用 GCD 让我在执行某些任务时显示“等待”屏幕,然后在完成后隐藏屏幕。现在,我有 - (void) doStu
只要包含 Rect 默认构造函数,我就有以下代码可以正常运行。但是,如果我将其注释掉,希望它会“跳到”Shape 默认构造函数,但它无法编译。 #include class Shape { publ
我有一个关于 SOR(连续过度松弛)的问题。我知道 SOR 可以描述为 N*N 网格,您在网格上执行 n 次迭代,并且可以报告执行时间。该基准测试有一个迭代外循环和两个内循环。内循环用于更新网格的每个
我在 wordpress 中设计了一个模板,现在我正在用 css/html 编写它,但浏览器似乎没有使用我的字体。 Photoshop: 浏览器: 这是我的CSS h1 { font-size: 34
在尝试查找用 C 编写的某些进程应用程序的所有根,并调用我所做的自定义系统调用时,该调用返回一个包含所有进程的数组使用 task_struct* 的信息,我发现任务 swapper/0 是通过父指针指
我们正在通过本地代理服务器播放媒体。在新的 Samsung Grand 设备出现之前,一切都很好。在该特定设备中,我们收到如下 Socket 异常: 4-04 17:55:35.646: W/Syst
GCD 允许根据 4 个全局优先级队列(高、默认、低、背景)将 block 分派(dispatch)到队列。 我的应用程序中有几个 NSOperationQueues,但希望以不同的优先级运行每个。据
长值参数在 dispatch_semaphore_create 中表示什么? dispatch_semaphore_create(long value) 我在文档中没有看到这一点,只有它与零参数一起使
给定以下代码片段: #import @interface DispatchTests : XCTestCase { dispatch_queue_t _workQueue; disp
有谁知道关于 Apple 即将推出的“Grand Central”技术(在 Snow Leopard 中)的任何好的网站,以及它与来自 Microsoft 的 Parallel Extensions(
documentation for dispatch_semaphore_wait说它“以 FIFO 顺序等待信号”。但在这个例子中似乎没有——有人可以解释一下吗? 示例: #include #in
在名为“报告”的事件工作表中,我有 2 列 I 和 F。 它具有包含文本“总计”的重复单元格。 如果它自动包含总计,我想删除整行。 VBA 代码会很好。 最佳答案 使用以下VBA代码,您可以快速删除具
我正在尝试了解队列类型之间的差异。据我了解,有 3 种类型: 全局队列 - 并发 - block 无论顺序如何都会尽快执行 主队列 - 串行 - block 在提交时执行 私有(private)队列
假设当应用程序进入暂停模式时,我正在运行一个GDC线程。会发生什么?胎面会停止还是继续运行?还是我必须自己停止它,在这种情况下如何完成? 谢谢指教! 最佳答案 Background State & N
我正在使用我为 GCD 找到的一个相当不错的教程,它向您展示了如何声明一个新的调度队列。 Grand Central Dispatch operates using queues. Queues ar
我是一名优秀的程序员,十分优秀!