1

Instruments が実行されていて、Activities Monitor が選択されている場合、iPhone 4S で実行されているアプリは、コンテキストが解放されている場合は 4.88MB を使用し、コンテキストが解放されていない場合も 4.88MB を使用するためです。つまり、コンテキストの解放はオプションですか? (実際には必要だと思いました)。コンテキストはCGContextRef変数によって参照されました。(ARC が使用されています)。

コンテキストはCGBitmapContext、Retina ディスプレイ用に作成されたので、約 640 x 640 で、4 つのコンテキストがあり、すべて で作成されviewDidAppearます。1 ピクセルが 4 バイトの場合、各コンテキストは既に 1.6MB になると思いました。完了後viewDidAppear、コンテキストが自動的に解放された可能性はありますか? 基本的に、これらのビットマップ コンテキストからオブジェクトを生成し、 ( を使用して) オブジェクトCGImageが指すように CGImage オブジェクトを設定したので、ビットマップ コンテキストは不要になりました。Xcode 4.3 と ARC を使用してコンパイルされ、iOS 4.3 を対象としています。(しかし、ARCの一部ではないと思いました)。CALayerlayer.contents = (__bridge id) cgImage;CGContextRef

更新:修正:「CGBitmapContextからCGImageオブジェクトを生成し、CGImageオブジェクトをCALayerに設定する」(元の質問はそれを反映するように編集されています)。

4

1 に答える 1

5

CGContextRef の解放はオプションではありませんが、解放する必要があるかどうかを認識しておく必要があります。標準の手動メモリ管理規則に従います。所有権を取得した場合 (割り当て、作成、保持、その他いくつか)、所有権を解放 (リリース) する必要があります。所有権がないときにリリースすると、オーバーリリースになります。

おそらくあなたが見ているのは、オブジェクトを解放した後でも、他の誰かがそれを保持しているということです. それはおそらくあなたのビュー階層にあるものです。通常、所有権を解放した後にオブジェクトが解放されないことは問題ではありません。

于 2012-08-17T19:05:36.043 に答える