MapViewとUIImagePickerを使用してアプリを作成しています。画面に地図を表示し、ユーザーが進むにつれてその表示ルートを表示しています。ユーザーはその間に画像をキャプチャできます。そのための画面が2つあります。
- 地図を表示しています
- 画像のキャプチャ(これは画面1からプッシュされます)
画面1から画面2に移動すると、ImagePickerが表示され、ユーザーが画像をキャプチャできるようになります。画面1に戻るとrelease
、すべてのオブジェクトが作成されnil
ます。このタスクは通常で行われましviewDidUnload
たが、メモリの問題が発生していたため、ViewControllerがポップしたときに実行しました。したがって、すべてのオブジェクトは、使い終わるとすぐに解放され、ゼロになります。
地図からログイン画面に移動すると、次のようなことをすべて実行しています。
- スーパービューからビューを削除する
- すべての関連オブジェクトまたは保持されたオブジェクトを解放します(NSStringオブジェクトも含む)
nil
それらすべてのオブジェクトに値を設定します。
プロファイリングでアプリを実行し、実行時のリークが発生しない場合でも、Activity Monitorでも、アプリの実際のメモリは増え続けます:(
10〜12枚の画像がキャプチャされた後Received memory warning. Level=1
、UIImageオブジェクトをメモリに保存していません。私はこれをドキュメントディレクトリに書き込み、文字列パスのみを保存しています。
私を助けて、この問題を解決するために他に何ができるかを教えてください。
アップデート
私が使用している戻るボタンでオブジェクトを解放している間:
- (void)releaseObjects {
[mapViewNewTour setDelegate:nil];
[mapViewNewTour removeFromSuperView];
[mapViewNewTour release];
mapViewNewTour = nil;
[lblNavTitle release];
lblNavTitle = nil;
[btnEdit release];
btnEdit = nil;
[txtTourName release];
txtTourName = nil;
[vwTourName release];
vwTourName = nil;
[mutDictOfflineSharing release];
mutDictOfflineSharing = nil;
[mutArrImage release];
mutArrImage = nil;
[_routeLine release];
_routeLine = nil;
[_routeLineView release];
_routeLineView = nil;
[aLazyLoader release];
}