unowned(safe)
「可用性」についてSwiftリファレンスを確認する方法はありますか? isReferenceAccessible
したがって、次の例のような仮想関数を探しています。
func someMethod() {
someAsyncOperation(parameters) { [unowned(safe) self] in
guard isReferenceAccessible(self) else {
return
}
self.someAnotherMethod()
}
}
免責事項:この質問はweak
参照についてではありません!strong
、unowned
およびweak
参照がどのように機能するかを認識しています。そして、私は参照を使いたくありませんweak
(遅くて変更可能であるため)。アクセスしようとしているときにunowned(safe)
既に参照が割り当てられている場合でも、参照が割り当てられることはわかっています。deinited
そして、コンパイラがこのチェックを行うことができ、アプリケーションがクラッシュする前に実際にチェックすることを知っています。
したがって、最新の Swift で参照サイクルを破るための非常に強力でパフォーマンスの高いテクニック/パラダイムになると私は信じています。
さらに、私はそれが素晴らしい言語機能になると信じています! たとえば、モディファイヤが呼び出されshared_ownership
、上記の動作で次のように動作するとします。
method(parameters) { [shared_ownership self] in
self.someAnotherMethod()
}
...次のような実装で:
method(parameters) { [unowned(safe) self] in
guard isReferenceAccessible(self) else {
return
}
self.someAnotherMethod()
}
weak
...次と同等の副作用があります(関連する複雑さとパフォーマンスのペナルティなし):
method(parameters) { [weak self] in
guard let strongSelf = self else {
return
}
strongSelf.someAnotherMethod()
}
ああ、それは素晴らしいでしょう!
、、およびの違いweak
unowned(safe)
unowned(unsafe)
に関する詳細情報。
アップデート
上記の機能に関連する素晴らしい Swift の提案を見つけました: Allow using optional binding to upgrade self from a weak to strong reference。