問題タブ [retain-cycle]

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 投票する
1 に答える
124 参照

ios - ARC とブロックの使用時にサイクルを維持する

オブジェクトメソッドが完了引数としてブロックを受け取るときの私の理解から、ブロックで「自己」を送信できます。

しかし、このオブジェクトがブロックを「保持」する (将来の使用のために保存する) 場合、自分自身の「弱い」コピーを送信する必要があります。

しかし、次のような変種も見ました:

そして、この最後のバリアントを実行する理由/時期が明確ではありません

0 投票する
2 に答える
524 参照

objective-c - iOS - CoreData を使用した dispatch_async 保持サイクル

私はdispatch_queueを初めて使用し、バックグラウンドでCoreDataに保存しようとして問題に遭遇しました。CoreData プログラミング ガイドを読み、NSManagedObjectContextバックグラウンド スレッドで別のスレッドを作成しています。テスト プロジェクトで sを作成する単純なループを実行するとNSManagedObject、問題は発生しません。オブジェクトが作成され、 を使用しNSManageObjectContextDidSaveNotificationて変更をメイン スレッドに伝えます。

私の問題は、GCD を知らないことにあると思います。XML を解析していますparserDidEndDocument:が、UI をブロックせずにデータを CoreData に保存する必要があります。このブロックが使用されるたびに、アプリのメモリが手に負えないほど雪だるま式に増え始め、最終的Terminated app due to memory pressure

注: AppDelegate のシングルトンを使用して my を保持し、NSPersistentStoreCoordinatorstuffToSave はNSMutablearrayパーサーによって作成されます。

どんな方向性でも大歓迎です。私は2日間頭を殴っています!

編集 1:NSManageObjectContextDidSaveNotification解析を行っている場所とは異なるクラスから リッスンしています。私が持ってviewDidLoadいる:

次に、Apple の「ThreadedCoreData」の例から以下を使用しています。

0 投票する
2 に答える
939 参照

ios - iOS ARC ブロック保持サイクル

以下のブロックが保持サイクルに変わっているかどうか誰か確認できますか? このブロックは、SampleClass1 ではなく SampleClass2 によって呼び出されていることに注意してください。

0 投票する
4 に答える
10699 参照

ios - UIViewController から呼び出された保持されない完了内で自己を参照する場合、weakSelf/strongSelf ダンスは本当に必要ですか?

UIViewControllerサブクラス内に次のメソッドがあるとします。

selfブロック内への参照により、UIViewControllerインスタンスがブロックによって保持されることはわかっています。performAsyncNetworkCallWithCompletionのプロパティ (または ivar) にブロックを保存しない限り、NetworkService保持サイクルがないと考えるのは正しいですか?

performAsyncNetworkCallWithCompletion上記の構造により、システムによって以前にリリースされたとしても、終了するまで UIViewController が保持されることになります。しかし、 ( iOS 6 が aのバッキングメモリを管理する方法が変更されUIViewController 後) システムが my の割り当てを解除する可能性は高いでしょうか (または可能でしょうか? )。UIViewControllerCALayer

「weakSelf/strongSelf ダンス」をしなければならない理由があるとすれば、次のようになります。

しかし、これは無意識に醜いので、必要がない場合は避けたいと思います。

0 投票する
2 に答える
372 参照

ios - 変更をマージする際に Core Data のマルチスレッド保持サイクルを解除するにはどうすればよいですか?

私のアプリケーションでは、ストレージに CoreData を使用し、NSFetchedResultsController を使用してデータを表示しています。

私は raywenderlich のチュートリアルに従ってそれを完成させました。それは大量のコードですが、一般的には適切に機能しています。必要に応じてその一部を投稿します。私は理解できない問題に固執しました。

NSFetchedResultsController と組み合わせた UITableView 内に表示されるデータは、バックグラウンドで更新できます-ここで私の問題が始まりました。

Pull-to-refresh アプローチを行っており、別のスレッドでバックグラウンドでダウンロードを開始しています。このスレッド用に作成された独自の NSManagedObjectContext を使用し、すべてのオブジェクトが作成された後に保存します。

コードは次のとおりです。

Apple docs で読んだことによると、メインスレッド NSManagedObjectContext でこれらの変更を検出する適切な方法は次のとおりです。

基本的に、managedObjectContext の変更に関する通知を受け取ると、変更をメイン スレッド コンテキストにマージします。そして、それは一般的に機能しますが、プロファイリングを開始した後、記述されたプロセスにマージされたすべてのオブジェクトが決して割り当て解除されないことを発見しました.

メインスレッドですべてを行うと、動作します-UITableViewをスクロールすると、期待どおりに割り当てが解除されます。

回避策を見つけたので、電話しています:

マージが完了したら:

しかし、なぜそれをしなければならないのか、それが他の何かを壊すのかどうかはわかりません. バックグラウンドでデータを更新するより良い方法があるかもしれませんが、私は完全に間違った方向に進んでいます。

0 投票する
1 に答える
960 参照

ios - Objective-C 自分のオブジェクトを参照しているオブジェクトを確認する方法 (保持サイクル)

コードの特定の部分で、オブジェクトの割り当てが解除されることを期待していますが、そうではありません。

そのオブジェクトが与えられた場合、どのオブジェクトがそれを参照しているかを確認するにはどうすればよいですか?

また、オブジェクトの参照カウントが上がるたびに知ることは可能ですか? (およびどのオブジェクトによって)

0 投票する
2 に答える
1226 参照

ios - self を参照する別のメソッドを呼び出すブロック内でメソッドを呼び出すと、リテイン サイクルが発生しますか?

doFirstここで保持サイクルが発生する可能性はありますか?

0 投票する
2 に答える
1957 参照

ios - UINavigationController と UIViewControllers の間に保持ループがない理由

状況: UIViewController がプッシュされた UINavigationController があります。

1.UIViewController は UINavigationController を強く参照しています

2.UINavigationController はビュー コントローラを NSArray に格納します

UINavigationController は、この NSArray への強力な参照を持つ必要があります (または、割り当てが解除されます)。

3.NSArray には、含まれているビュー コントローラーへの強力な参照があります。

更新: 次のコードのどこかを想像してみましょう:

私の質問は、なぜここに保持ループがないのですか?