問題タブ [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.
ios - NSBlockOperation について
入ってきてNSBlockOperation
、いくつか質問があります。特に、のドキュメントにaddExecutionBlock
は次のように記載されています。
討論
指定されたブロックは、その実行環境について何の仮定もすべきではありません。
レシーバーが実行中または既に終了しているときにこのメソッドを呼び出すと、
NSInvalidArgumentException
例外がスローされます。
どんなシチュエーションで投げるNSInvalidArgumentException
?「受信者が実行中」とはどういう意味ですか? 何が原因でしょうか?
ios - NSBlockOperation、NSOperationQueue、およびブロック
RestAPI から大量の情報を同期する必要があります。作業を完了するには、RestAPI 呼び出しを 6 回行う必要があります。ブロックを使用して API 呼び出しを設計し、存在する場合は NSError を返します。これらの呼び出しのうち 3 つをネストして実行する必要があります。これは、最初の呼び出しが他のユーザーに情報を提供し、他の 3 つの呼び出しが独立して実行できる間に実行を許可するためです。ネットワークのパフォーマンスを向上させるために、同期呼び出しを次のように設計しました。
- 最初のネストされた 3 つのブロックを含む 1 つの NSBlockOperation。
- 他の 3 つのブロックを含む 1 つの NSBlockOperation。
- 「セフォア」として使用する 1 つの NSBlockOperation で、すべての作業が完了したときに通知されます。
最後の NSBlockOperation は、前の 2 つの NSBlockOperation に依存しています。
また、セマフォ NSBlockOperation がキューの最後に追加される 3 つの NSBlockOperation すべてを含む NSOperationQueue もあります。私が達成したい結果は次のとおりです。最初の 2 つのブロックが Concurrently と呼ばれ、それらの作業が終了すると、セマフォ NSBlockOperation が呼び出され、UIAlertMessage を提供するユーザーにコントロールが返されます。
その結果は、以前に説明したものとは異なります。コントロールは、syncAllBlocksInformationブロックの終了を待たずに返されます。
NSBlockOperation を含むコードの下:
そして、ここで、上記のブロックを呼び出すコード:
どうしたの ?
ios - NSBlock はいつ解放されますか?
ビューコントローラーでは、次のようにコピータイプのNSBlockのプロパティがあります
アプリケーションが myViewController からポップすると、ブロックは自動的に解放されますか?
注:私のプロジェクトは ARC 対応です。
ios - NSOperationQueue シーケンスを理解していない
Web サービス経由でデータをフェッチし、そのデータを Core Data データストアに保持し、デリゲート メソッド経由で ViewController を更新する DataFetcher というモデル クラスがあります。NSOperation を使用しない場合の通常のシーケンス (正常に動作する) は次のとおりです。
Web サービス呼び出しとデータベース更新呼び出しをバックグラウンド スレッドに配置する必要があります。私の考えでは、NSBlockOperation を作成して Web サービスを呼び出し、次に別の NSBlockOperation を作成してデータベースの更新を行うことです。データベースの更新操作が開始される前に Web サービス操作が完了するという依存関係があります。実装しようとしているコードは次のとおりです。
このように設定すると、 queryServiceFor: メソッドが呼び出されません。2 つのデリゲート メソッド呼び出しは UI を更新し、メイン スレッド上にある必要があるため、どこに配置すればよいかもわかりません。過去に何度か GCD を使用しましたが、NSOperations の追加機能が必要になります。誰でも助けることができますか?ありがとう!
ios - AFHTTPRequestOperation と NSBlockOperation (iOS) を組み合わせますか?
2 つのリクエストを実行し、最後に通知を送信したいと考えています。操作のシーケンスをチェックする私のコード:
次のコンソール ログが期待されます。
しかし、実際の結果は次のとおりです。
なぜ?
ios - NSBlockOperation リテイン サイクル
イメージをダウンロード (およびディスクに保存) するために NSOperations を使用する必要がありましたが、メモリが解放されませんでした! いくつかのグーグル検索の後、保持サイクルでの操作であるフックを見つけました。コードを修正しようとしましたが、問題はまだここにあります。
誰でも私のコードでエラーを見つけることができますか?
私のコードがあります:
swift - Swift NSBlockOperation() リーク: NSBlockOperation() を弱くすることはできません
Objective-C で NSBlockOperation を使用する際のメモリ リークを回避するには、変数を weak として宣言して、ブロック内のブロック操作を参照できるようにする必要があります (必要に応じてキャンセルするため)。通常は次のようになります。
しかし、Swift では、NSBlockOeartion を弱いと宣言しようとすると、常に nil になります。
弱い参照がなければ、毎回少しずつメモリ リークが発生することを除けば、すべて問題ありません。Swiftでメモリをリークせずにブロック内のブロックを参照するにはどうすればよいですか?