私はこの問題の解決策を見つけるためにあらゆる場所を探してきました。何も役に立たないようです。
メモリが解放されない理由を見つけるために、この基本的なテストを設定しました。
if (texture != nil)
{
[texture release];
texture = nil;
}
else
{
UIImage* ui = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"]];
texture = [[Texture2D alloc] initWithImage:ui];
}
ここで、これをタッチ開始に配置し、最初のタッチ後、開始時に計測器 (通常は 11.5 - 12mb) を使用してメモリ使用量を監視することでテストします。オブジェクトが存在しない状態で、テクスチャが作成され、メモリが 13.5 - 14 にジャンプします。
ただし、2 回目のタッチの後、メモリは減少しますが、約 12.5 ~ 13 に過ぎません。
まだかなりの量のメモリが占有されています。
これをはるかに大規模にテストし、これらの大きなテクスチャを一度に 10 個ロードしました。メモリは 30 MB を超えてそこにとどまりますが、テクスチャを解放した後の 2 回目のタッチでは、約 22 MB にしか落ちません。
[uiimage imagenamed:] を使用してイメージをロードするテストをもう一度試しましたが、このメソッドが実行するキャッシングのために、30MB が完全にメモリに残っていることを意味します。