15

CGBitmapContextCreate を使用してコンテキストを作成しました。CGContextRelease を使用してリリースする必要がありますか? Objective-C では答えがイエスであることはわかっていますが、Swift ではどうでしょうか?

ありがとう!

4

2 に答える 2

25

非管理対象として明示的に指定されていない限り、CFType は自動的に管理されます。
ドキュメントによると。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html

注釈付き API から返される Core Foundation オブジェクトは、Swift で自動的にメモリ管理されます。CFRetain、CFRelease、または CFAutorelease 関数を自分で呼び出す必要はありません。独自の C 関数および Objective-C メソッドから Core Foundation オブジェクトを返す場合は、それらに CF_RETURNS_RETAINED または CF_RETURNS_NOT_RETAINED の注釈を付けます。コンパイラは、これらの API を呼び出す Swift コードをコンパイルするときに、メモリ管理呼び出しを自動的に挿入します。Core Foundation オブジェクトを間接的に返さないアノテーション付き API のみを使用する場合は、このセクションの残りをスキップできます。それ以外の場合は、アンマネージ Core Foundation オブジェクトの操作について学習を続けてください。

注釈が付けられていない API を Swift がインポートする場合、コンパイラは返された Core Foundation オブジェクトを自動的にメモリ管理できません。Swift は、これらの返された Core Foundation オブジェクトを Unmanaged 構造にラップします。

アンマネージ型には型シグネチャがあります

func StringByAddingTwoStrings(CFString!, CFString!) -> Unmanaged<CFString>!

CGBitmapContextCreate型シグネチャを持つ

func CGBitmapContextCreate(...) -> CGContext!

したがって、swift によって自動的に管理されます。

于 2015-01-10T04:37:18.747 に答える
12

いいえ、電話する必要はありませんCGContextRelease。実際、しようとすると、次のエラーが発生します。

「CGContextRelease」は使用できません: Core Foundation オブジェクトは自動的にメモリ管理されます

CGContextインスタンスは、Swift で自動的にメモリ管理されます。関数のシグネチャから次のことがわかります。

func CGBitmapContextCreate(/* several parameters */) -> CGContext!

自分で解放する必要がある戻り値は次のようになります。

func CGBitmapContextCreate(/* several parameters */) -> Unmanaged<CGContext>!
于 2015-01-10T04:43:26.017 に答える