4

iOS アプリで Swift 3 と ARC を使用していますが、オブジェクトを手動で保持したいと考えています。

object.retain() を試しましたが、Xcode は ARC モードでは使用できないと言っています。これを行う別の方法はありますか?


長いバージョン:

CLLocationManager のデリゲートとして自身を登録する LocationTracker クラスがあります。ユーザーの場所が変更されると、場所という名前の静的変数が更新されます。場所を必要とするコードの他の部分は、LocationTracker インスタンスへの参照を持たない、または必要とせずに、この静的変数にアクセスします。

この設計の問題は、デリゲートが保持されないため、CLLocationManager がメッセージを送信するまでに LocationTracker の割り当てが解除され、クラッシュが発生することです。

デリゲートとして設定する前に、LocationTracker の refcount を手動でインクリメントしたいと思います。アプリが実行されている限り場所を監視する必要があるため、オブジェクトの割り当てが解除されることはありません。

LocationTracker への参照を保持する静的変数「インスタンス」を持つという回避策を見つけました。「インスタンス」変数を​​使用するつもりはないので、この設計は洗練されていないと考えています。それを取り除き、refcount を明示的にインクリメントすることはできますか?

もう一方の質問はObjective-Cに関するもので、これはSwiftに関するものであるため、この質問は重複していません。

4

2 に答える 2

7

これは、関数を使用して簡単に実行できwithExtendedLifetime(_:_:)ます。ドキュメントから:

クロージャが戻る前に指定されたインスタンスが破棄されないようにしながら、クロージャを評価します。

乾杯!

于 2018-09-05T21:09:44.947 に答える