引数として受け取る関数を定義する場合は、_ptr型の引数として定義します。等は行ってはいけません。duplicate関数で複製する必要があります。out()関数呼び出し以前にもしオブジェクト参照を保持している場合は、その所有権を放棄し参照は破棄されます。out引数にオブジェクト参照を渡す際に使用します。関数から戻ってきたあと、この変数に新たにオブジェクト参照が保持されていることが期待されます。このとき、オブジェクト参照の所有権はこの変数に保持されていると考えます。変数を渡された関数側では、何らかの形でオブジェクト参照を生成または複製して、引数に所有権を渡す必要があります。out引数として受け取る関数を定義する場合は、_ptr型参照の引数として定義します。関数内では、引数は必ずnilオブジェクト参照であり、かつ通常何らかのオブジェクトを所有権を与えて代入することが期待されます。×所有権を複製していない。○所有権を複製している。されても、オブジェクト参照は解体されない。スコープを抜けたので参照カウントがデクリメントされる。inout()リファレンスへのポインタの参照を返します。inout引数にオブジェクト参照を渡す際に使用します。関数内では何らかのオブジェクト参照が引数に入っていることが期待され、オブジェクトの所有権は関数側に移行します。関数は何らかのオブジェクト参照をこの引数に与えて返すことが期待され、引数すなわち呼び出し元の変数に所有権を与えます。してから新たなオブジェクト参照を生成または複製して引数に所有権を渡す必要があります。inout引数として取る関数は、設計の観点からあまり推奨されません。inout引数として取る関数を定義する必要がある場合は、_ptr型参照の引数として定義します。なければオペレーションを呼ぶことができる。するテクニックを使用してもよい。されても、オブジェクト参照は解体されない。指すものは入れ替わっているかもしれない。スコープを抜けたので参照カウントがデクリメントされる。_retn()現在持っているオブジェクト参照の所有権を放棄してポインタを返します。}通常、関数の戻り値にオブジェクト参照を返す場合に使用されます。所有権は関数の呼び出し側に渡るので、呼び出し側ではオブジェクト参照を破棄する必要があります。するか、_var型変数で受ける必要があります。所有権を複製しておく必要があります。×所有権がretに移ってしまう。所有権を保持し続ける。_duplicateしてreturn_var型、_ptr型の代入でのリファレンスカウント_ptr型への_var型の代入ポインタへの代入。これは参照カウントエラーを引き起こす恐れがある。さすであろうが、参照カウントの保守はなされな。すれば、メモリリークが生じる。