问题标签 [nsoperation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 编写 NSOperation 友好的方法
我有一个对象 ( Processor
),其中包含几个执行冗长计算的方法。我想在主线程和NSOperation
子类中都使用这些方法。
在我的NSOperation
子类代码中,我反复调用isCancelled
,所以取消是相当敏感的。但是,当操作调用其中一个冗长的Processor
方法时,它无法响应取消,直到该方法返回。
是否有一种编写方法的好方法,以便它们可以在有操作和没有操作的情况下使用?我正在考虑operation
为我的 CPU 密集型Processor
方法添加一个参数并像这样编写它们:
以前有没有其他人遇到过这个问题?有没有更好的办法?
iphone - 使用 NSOperation 搜索
我正在尝试制作一个搜索栏来搜索我使用 NSURLConnection 收到的内容。现在,如果我搜索某些内容,该字符串将作为带有异步请求的 URL 发送出去,从而为我提供数据。
该数据已解析,成功后我发布通知
我的 searchresultsTableView 被重新加载。
所有这些方法都是相互依赖的,所以当A还在忙时,B无法执行。我正在使用 NSNotificationCenter 告诉他们执行这些代码。
但我想尝试 NSOperation,但我不知道如何实现它。我是否必须将我的搜索请求放入一个操作或我正在使用的每个方法中?
有人可以给我一个示例代码,让我知道应该如何做吗?提前致谢...
iphone - 在for循环中取消NSOperation?
我正在尝试使用NSOperation
on在后台线程上实现搜索iOS
。我不想继承NSOperation
,所以这就是我正在做的事情:
search 方法包括一个 for 循环,用于检查正在搜索的内容是否在数组中。现在,当我NSOperation
通过调用取消时cancelAllOperations
,for 循环继续在数组中运行。我想防止这种情况发生,并想知道从 for 循环中调用它是否合法:
iphone - iPhone内存管理:设置self.someProperty = nil后释放
我正在阅读 Apple 发布的LazyTableImages 代码,他们为此做了一些事情(在 NSOperation 子类中):
我的想法是,如果 dealloc
在将属性设置为 nil 之前调用它们,他们会这样做。
我的想法在这里正确吗?发布是不必要的,因为self.myProperty = nil
有效发布myProperty
?
我在这段代码中注意到的一件事是它们并没有release
全部保留 中的对象dealloc
,只有其中一些,这确实是我感到困惑的原因。
干杯
core-graphics - NSOperation 中来自 CoreGraphics API 的 EXC BAD ACCESS
我正在尝试使用 MacRuby 在 NSOperation 中进行一些 CoreGraphics/CoreImage 操作。我有一些 API 调用将源文件读入 CG 并设置 CGImageDestination。
如果我将以下代码放入 NSOperation.init 中,一切正常:
但是,如果我将相同的代码放入 NSOperation 的主函数中,则会出现零星的 EXC_BAD_ACCESS 错误。并且仅在将 NSOperation 传递给 NSOperationQueue 时;如果我自己调用 main ,它工作得很好。
在我运行的主要部分结束时:
更奇怪的是它在 init 中工作,即使 init 不是从主线程调用的(所以不是主线程/后台线程问题,我猜)
有什么想法吗?
objective-c - 使用 NSData 解决生产者-消费者问题(用于音频流)
我正在使用 AVAssetReader 将 PCM 数据从 iPod 轨道复制到缓冲区,然后使用 RemoteIO 音频单元播放。我正在尝试创建一个单独的线程来加载声音数据,这样我就可以在加载缓冲区时访问和播放缓冲区中的数据。
我目前有一个大型 NSMutableData 对象,它最终保存了整首歌曲的数据。目前,我使用 NSOperation 在单独的线程中加载音频数据,如下所示:
- AVAssetReaderOutput 一次最多复制 8192 个字节到 CMBlockBuffer
- 将这些字节复制到 NSData 对象
- 将此 NSData 对象附加到更大的 NSMutableData 对象(最终保存整首歌曲)
- 完成后,通过访问 NSMutableData 对象中的每个数据包来播放歌曲
我试图在复制这些字节的同时播放歌曲。我不确定同时写入和读取文件的好方法是什么。
我有一个简短的想法:
- 创建并填充 3 个 NSData 对象,每个对象的长度为 8192 字节,作为缓冲区。
- 开始播放。当我播放完第一个缓冲区后,将新数据加载到第一个缓冲区中。
- 当我播放完第二个缓冲区后,将新数据加载到第二个缓冲区中。第三个也是一样
- 再次从第一个缓冲区开始播放,填充第三个。等等。
或者,创建一个包含 3 * 8192 个 PCM 单元的 NSData 对象,并以某种方式使用两个不同的线程同时对其进行写入和读取。
我的代码现在在两个不同的线程上工作。我将数据附加到数组,直到我按下播放,此时它停止(可能是因为线程被阻塞,但我现在不知道)并播放直到它到达我加载的任何内容的末尾并导致 EXC_BAD_ACCESS 异常。
简而言之,我想找到正确的方式在 PCM 数据被复制时播放,比如一次复制 8192 个字节。我可能不得不使用另一个线程(我现在正在使用 NSOperation)这样做,但不清楚如何同时写入和读取缓冲区,最好使用一些更高级别的 Objective-C 方法。
iphone - 正确地释放 NSOperationQueue
我想知道解除分配 ivar NSOperationQueue 的正确方法是什么,以防它仍有一些正在运行的操作,这通常发生在用户突然退出应用程序时。在一些示例中,我看到使用了 waitUntilAllOperationsAreFinished,如下所示:
p>但是许多人建议避免这样做,因为它会挂起运行循环。那么释放的正确方法是_queue
什么?如果我不等待操作完成而继续发布会发生什么?
cocoa - 选择文件/目录后立即关闭 NSOpenPanel
我是 NSOpenPanel/NSSavePanel/NSPanel 的新手。我正在使用 NSOpenPanel 选择一个目录,我的应用程序将对其文件进行迭代并进行一些相当耗时的处理。
我可以在面板上调用 -close ,但这不会将焦点返回到主窗口。我已经阅读了很多关于“关闭”面板的内容 - 但我没有找到任何“关闭”而不是“关闭”面板或窗口的方法。
只是我需要生成一个后台线程(NSOperation)吗?
这就是我的 -chooseDidEnd:returnCode:contextInfo:
虽然 NSOpenPanel 确实消失了,但我的 NSProgressIndicator 没有动画,并且主窗口直到-doLotsOfTimeConsumingWork: 完成后才会激活。
更新 刚刚查看了 NSOperationSample 代码,看起来就是这样。
cocoa - 在 NSOperation 中自动释放对象是否安全?
我在 NSOperationQueue 中运行 NSInvocationOperation 类型的操作,并且想知道自动释放对象是否安全 - 也就是说,是否保证为每个操作启动的线程都有自己的自动释放池。
我没有找到任何用于操作的文档自动释放池 - 阅读 Apple 的文档实际上表明我确实需要定义自己的自动释放池。
但是:1)我看不到仪器中的任何泄漏,至少不会超过我在操作中分配自己的自动释放池时。
2)查看调试器我可以看到这个堆栈跟踪:
所以看起来好像有一个 CFAutoreleasePool - 假设这个对象会在操作完成时对我所有的自动释放对象调用释放是否安全?
iphone - iphone - 将数据发送到服务器并使用 NSOperationQueue
在我的应用程序中,我必须向服务器发送大量报告。所以我创建了一个继承自 NSOperation 的类 SendReport。
现在我在我的视图控制器类中创建 NSOperationQueue 然后创建多个对象并将它们添加到队列中。
现在在 SendReport 中,在“main”中,我想创建 NSMutableURLRequest 和 NSURLConnection 并启动向服务器发送数据......我还想实现 NSURLConnection 到观察者数据传输的委托以及完成时......
有人可以指导我如何实现将数据传输到服务器并实现委托的“SendReport”类吗?