問題タブ [unsafe-unretained]
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.
swift - takeUnretainedValue と takeRetainedValue の違いは何ですか?
takeUnretainedValue
とはどう違いtakeRetainedValue
ますか?Appleのドキュメントに基づく:
これらのメソッドはどちらも、オブジェクトのラップされていない元の型を返します。呼び出している API が保持されていないオブジェクトまたは保持されたオブジェクトを返すかどうかに基づいて、使用するメソッドを選択します。
しかし、管理されていないオブジェクトが保持されていないオブジェクトなのか保持されていないオブジェクトなのかは、どうすればわかりますか? たとえば、フレームワークのメソッドABAddressBookCreateWithOptions:
はAddressBook
管理されていないオブジェクトを返しますが、ABAddressBook
一部のチュートリアルではこれを保持オブジェクトと見なしています。を使用するALAsset
と、メソッドthumbnail
は管理されていないオブジェクトCGImage
を返します。一部のチュートリアルでは、これを保持されていないオブジェクトと見なします。
よろしくお願いします。
swift - `unowned` (実際には `unowned(safe)`) 参照が deinit されていることを確認する方法はありますか?
unowned(safe)
「可用性」についてSwiftリファレンスを確認する方法はありますか? isReferenceAccessible
したがって、次の例のような仮想関数を探しています。
免責事項:この質問はweak
参照についてではありません!strong
、unowned
およびweak
参照がどのように機能するかを認識しています。そして、私は参照を使いたくありませんweak
(遅くて変更可能であるため)。アクセスしようとしているときにunowned(safe)
既に参照が割り当てられている場合でも、参照が割り当てられることはわかっています。deinited
そして、コンパイラがこのチェックを行うことができ、アプリケーションがクラッシュする前に実際にチェックすることを知っています。
したがって、最新の Swift で参照サイクルを破るための非常に強力でパフォーマンスの高いテクニック/パラダイムになると私は信じています。
さらに、私はそれが素晴らしい言語機能になると信じています! たとえば、モディファイヤが呼び出されshared_ownership
、上記の動作で次のように動作するとします。
...次のような実装で:
weak
...次と同等の副作用があります(関連する複雑さとパフォーマンスのペナルティなし):
ああ、それは素晴らしいでしょう!
、、およびの違いweak
unowned(safe)
unowned(unsafe)
に関する詳細情報。
アップデート
上記の機能に関連する素晴らしい Swift の提案を見つけました: Allow using optional binding to upgrade self from a weak to strong reference。