问题标签 [nsblockoperation]

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.

0 投票
0 回答
403 浏览

ios - NSBlockOperations 导致内存泄漏,并导致 deinit 永远不会被调用 [swift]

这是我将消息插入我的集合视图的代码。

我需要块操作,以便在消息延迟时可以将其插入块中。

问题是每次我解雇重复项viewController时。print("completed")这意味着我有内存泄漏。

除非我deinit删除块操作,否则永远不会被调用,当我离开时如何释放块操作viewController

0 投票
0 回答
30 浏览

ios - 在 NSOperation 完成中保存父托管对象上下文是否安全

我有一个NSOperationQueue串行的并maxConcurrentOperationCount设置为1。

我正在创建许多操作来处理 CoreData 实体修改的数据。

在内部,[NSBlockOperation blockOperationWithBlock:^{我使用NSPrivateQueueConcurrencyType并正确分配了主上下文之外的子托管对象上下文parentContext

那么在主线程上保存父上下文completionBlock是否安全?NSBlockOperation

可以NSOperation completionBlock在下一个操作开始其“主要任务”时运行吗?

0 投票
1 回答
255 浏览

ios - iOS 使用 NSBlockOperation 限制异步 API 调用

我想将飞行 API 调用的数量限制为 2。我可以创建一个NSOperationQueue块并将其添加到队列中,但是每个 API 调用都有一个完成块,所以初始调用是有限的,但我不知道如何限制基于完成块的执行来处理队列。

在下面的代码中,任何时候都可能有超过 2 个调用 API。

将不胜感激任何指向要使用的正确模式的指针。

编辑 - 基于 Marc-Alexandre 的回答

已经创建了这个类来封装操作,从内存的角度来看是一种安全的方法,因为这个类将从 dataAccessService 创建并注入,以及具有对自身的引用的完成块,并且在完成之前调用完成块执行?

0 投票
0 回答
25 浏览

objective-c - NSBlockOperation 上的 CHCSV 导入程序内存问题

我在 XCode 8.2、Objective-C、OSX(不是 iOS)上,启用了 ARC。

我正在使用 DaveDelongs CHCSV 解析器在自定义 NSBlockOperation 中导入一个大型 CSV 文件。我的问题:操作完成后内存没有释放。即使我不保存解析的 NSArray* 也会发生同样的情况。

这是代码的基本部分:

SHimportDataOperation.m(自定义 NSBlockOperation)

这就是操作的开始方式:

编辑1:

经过进一步测试,我可以确认 NSBlockOperation 已成功执行并从内存中删除。

0 投票
1 回答
581 浏览

ios - NSBlockOperation 在执行之前不等待依赖

我正在学习NSOperations& NSOperationQueue

我有一组NSBlockOperation:“上传”和“删除”。删除必须 等待上传完成后再执行。

我想要做的是完成一组操作,然后再进行下一组操作。

我曾经NSThread sleepForTimeInterval模拟上传等待和删除延迟时间。

但是,这些操作不会等待集合完成。

我设置maxConcurrentOperationCount为 1 但这似乎不起作用。

您可以从输出中看到 Set 1 完成得很好。

但是在第二组中,上传 3在删除 2完成之前就盯着看。然后上传/删除 4 就可以了。然后从那里开始混合更多。

有什么帮助吗?

输出:

代码:

0 投票
2 回答
235 浏览

ios - 如何知道所有并发的NSOperations都完成了

我的情况是:

  • 我有用户
  • 每个用户都有一些可以通过用户对象获取的历史数据

我想做的是:

  • 最多 2 个用户必须同时获取他们的历史数据(这就是我想使用 NSOperationQueue 的原因)
  • 当任何用户完成获取其历史数据时,我需要得到通知
  • 当每个用户完成获取他们的历史数据时,我需要得到通知

我要问的是:

  • 既然我无法使用下面的代码完成它,我该如何实现我想做的事情?

任何帮助表示赞赏。

这个问题与这个问题不同我不想链接任何请求。我只想知道他们什么时候都完成了执行。

这个答案只有一个操作队列的完成块。

这个答案提供了一种让操作阻塞等到异步调用的方法loadHistoryData完成的方法。作为写作setSuspended

我找不到我需要的答案。有没有?

0 投票
2 回答
47 浏览

objective-c - 为什么__block不向数组添加值

我正在枚举块内的范围并将值存储在数组中。我希望使用 __block 应该将块内的值存储到数组中?

但这导致

位置是 4, 2 位置是 8, 2 位置是 14, 2

对于数组

(无效的)

我希望数组充满值。

0 投票
1 回答
231 浏览

objective-c - 内存泄漏 NSBlockOperation

我用在该操作中声明的对象声明了 NSBlockOperation。由于内存问题,我的应用程序经常崩溃。感谢任何提示与一个很好的解释,这花了几个小时仍然没有成功。

运行时:内存问题 -(5 种泄露类型):1 个NSExactBlockVariable实例泄露

0 投票
0 回答
330 浏览

swift - 进程一直停留在被中断的地方,使用“thread return -x”返回表达式求值前的状态

在此处输入“错误错误”图像描述

  • 我在操场上测试了上面的这部分代码。

  • 我做错什么了吗?

  • 是什么导致了这个问题?

  • 如何解决这个问题?

0 投票
0 回答
88 浏览

swift - 如何修复 NSFetchedResultsController controllerDidChangeContent 中的内存泄漏

问题: 当我分析我的应用程序时,函数 controllerDidChangeContent 中出现内存泄漏。Instruments 告诉我泄漏应该在线路中self.collectionView?.performBatchUpdates({ [unowned self] in。但是既然我已经添加了无主的自我但没有成功,怎么会有记忆循环。您对如何解决此泄漏有任何提示吗?

想法: 这可能是通过private var blockOperations = [BlockOperation]()类中声明的数组引起的吗?但是不可能将数组设置为弱。

}