func isKnownUniquelyReferenced <T>(inout T?) -> Bool
An instance of a class. This function does not modify object
; the use of inout
is an implementation artifact.
あるクラスのインスタンス。この関数はobject
を修正しません;inout
の使用は、技巧上の実装です。
Availability
Technology
func isKnownUniquelyReferenced<T>(_ object: inout T) -> Bool
where T : AnyObject
object
An instance of a class. This function does not modify object
; the use of inout
is an implementation artifact.
あるクラスのインスタンス。この関数はobject
を修正しません;inout
の使用は、技巧上の実装です。
true
if object
is known to have a single strong reference; otherwise, false
.
object
が強い参照をただ1つだけ持つものと知られているならばtrue
;そうでなければ、false
。
The is
function is useful for implementing the copy-on-write optimization for the deep storage of value types:
is
関数は、値型の深い貯蔵に対してコピーオンライト最適化を実装するのに便利です:
Use care when calling is
from within a Boolean expression. In debug builds, an instance in the left-hand side of a &&
or ||
expression may still be referenced when evaluating the right-hand side, inflating the instance’s reference count. For example, this version of the update(with
method will re-copy my
on every call:
is
をブール式の内部から呼び出すとき注意を払ってください。デバッグビルドにおいて、&&
または||
式の左手側でのインスタンスは、右手側を評価している時に依然として参照されるかもしれません、インスタンスのもつ参照カウントを上昇させながら。例えば、このバージョンのupdate(with
メソッドはmy
を全ての呼び出しで再コピーします:
To avoid this behavior, swap the call is
to the left-hand side or store the result of the first expression in a local constant:
この挙動を防ぐために、左手側への呼び出しis
を交換するか、最初の式の結果をローカル定数の中に格納してください。
is
checks only for strong references to the given object—if object
has additional weak or unowned references, the result may still be true
. Because weak and unowned references cannot be the only reference to an object, passing a weak or unowned reference as object
always results in false
.
is
は与えられたオブジェクトに対する強い参照に対してのみ確認します — object
がさらに弱いまたは非所有参照を持つ場合、結果は依然としてtrue
です。弱いおよび非所有の参照は、あるオブジェクトに対する唯一の参照ではありえないので、弱いまたは非所有参照をobject
として渡すことは常にfalse
という結果になります。
If the instance passed as object
is being accessed by multiple threads simultaneously, this function may still return true
. Therefore, you must only call this function from mutating methods with appropriate thread synchronization. That will ensure that is
only returns true
when there is really one accessor, or when there is a race condition, which is already undefined behavior.
object
として渡されるインスタンスが複数のスレッドによって同時にアクセスされる場合、この関数は依然としてtrue
を返します。したがって、あなたはこの関数を変更メソッドから適切なスレッド同期で呼ぶだけにしてください。それはis
が本当に1つのアクセッサしかない時に、またはすでに未定義挙動であるところの競合状態の時にtrue
を返すだけであるのを確実にします。
func isKnownUniquelyReferenced <T>(inout T?) -> Bool