3

takeUnretainedValueとはどう違いtakeRetainedValueますか?Appleのドキュメントに基づく:

これらのメソッドはどちらも、オブジェクトのラップされていない元の型を返します。呼び出している API が保持されていないオブジェクトまたは保持されたオブジェクトを返すかどうかに基づいて、使用するメソッドを選択します。

しかし、管理されていないオブジェクトが保持されていないオブジェクトなのか保持されていないオブジェクトなのかは、どうすればわかりますか? たとえば、フレームワークのメソッドABAddressBookCreateWithOptions:AddressBook管理されていないオブジェクトを返しますが、ABAddressBook一部のチュートリアルではこれを保持オブジェクトと見なしています。を使用するALAssetと、メソッドthumbnailは管理されていないオブジェクトCGImageを返します。一部のチュートリアルでは、これを保持されていないオブジェクトと見なします。

よろしくお願いします。

4

1 に答える 1

8

管理されていないオブジェクトが保持されていないオブジェクトか保持されているオブジェクトかを知るにはどうすればよいですか?

使用する API によって異なります。

ここにいくつかの規則があります:所有権ポリシー / Core Foundation のメモリ管理プログラミング ガイド

基本的に、関数名に「Create」や「​​Copy」という単語が含まれる場合は、 を使用します.takeRetainedValue()。関数名に「Get」という単語が含まれている場合は、 を使用します.takeUnretainedValue()

また、どちらも含まれていない場合でも、私の知る限り.takeUnretainedValue()、ほとんどすべての場合に使用できます。

ただし、すべてのルールには例外があります :) たとえば、以下を参照してください:
Swift UnsafeMutablePointer<Unmanaged<CFString>?> 割り当てと印刷

于 2015-03-11T05:34:16.347 に答える