1

タイプを使用するMonkSVGライブラリを使用しますboost::shared_ptr(これと同じように機能することを理解std::shared_ptrしています)。

私が理解しているように、自分でメモリを解放する必要はありません。

UIViewControllershared_ptr変数を定義し、このView Controllerをプッシュ/ポップするライブラリの例から別のコードを作成しました。しかし、メモリに問題があるか、この変数が思いどおりに機能しないようです。問題はshared_ptrオブジェクトのデストラクタにあります:

shared_ptrビューコントローラーをポップするたびに、オブジェクトのデストラクタを呼び出す必要があると思います。しかし、この変数に別のインスタンスのみを割り当てると呼び出されます。次のようになります。

プッシュ/ポップ | 共有_ptr | 通常のオブジェクト

押す | - | -

ポップ | - | デストラクタ

押す | デストラクタ | -

ポップ | - | デストラクタ

それは正常な動作ですか?

4

1 に答える 1

1

ポッピング( a で意味していると思いますUINavigationController) aUIViewControllerは必ずしも割り当てを解除するとは限りません(そのdeallocメソッドをオーバーライドして確認できます)。インスタンスへの強力な参照を保持している限り、UIViewControllerインスタンスは存続します。

ただし、変数を再割り当てするUIViewControllerと、古いインスタンスへの強い参照が失われ (ARC を使用している場合)、割り当てが解除され、shared_ptrインスタンス変数が破棄されます。

于 2013-10-31T12:59:07.840 に答える