大きなUIScrollViewがあり、そこに3〜4個のかなり大きな(320x1500ピクセル程度)UIImageView画像タイルを配置しています。これらのUIImageViewをNIBファイル内のスクロールビューに追加しています。コントローラに1つのコンセントがあり、それはUIScrollViewへのコンセントです。このためにプロパティ(非アトミック、保持)を使用し、それを合成しています。
私の質問はこれです:メモリモニターでこれを観察すると、これらすべての画像を含むビューがロードされると、使用されるメモリがかなり増加することがわかります(予想どおり)。しかし、私がビューを離れると、それとそのコントローラーは割り当て解除されますが、それらが使用したメモリの近くではあきらめないようです。これらのビューの1つ(アプリにはいくつかあります)を320x460の1〜3枚の画像に切り取り、他のすべてを同じままにすると、メモリが正常に再キャプチャされます。
これほど大きな画像を使用することに問題はありますか?このコード(以下に貼り付け)で何か間違ったことをしていますか?
これは、問題を引き起こしているviewControllerからのスニペットです。
- (CGFloat)findHeight
{
UIImageView *imageView = nil;
NSArray *subviews = [self.scrollView subviews];
CGFloat maxYLoc = 0;
for (imageView in subviews)
{
if ([imageView isKindOfClass:[UIImageView class]])
{
CGRect frame = imageView.frame;
if ((frame.origin.y + frame.size.height) > maxYLoc) {
maxYLoc = frame.origin.y;
maxYLoc += frame.size.height;
}
}
}
return maxYLoc;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.scrollView setContentSize:CGSizeMake(320, [self findHeight])];
[self.scrollView setCanCancelContentTouches:NO];
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.clipsToBounds = YES;
self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = NO;
}
- (void)dealloc {
NSLog(@"DAY Controller Dealloc'd");
self.scrollView = nil;
[super dealloc];
}
更新:私は別の奇妙な現象に気づきました。ビューのスクロールを使用しない場合、それはメモリにぶら下がっているようです。しかし、たくさんスクロールして、すべてのUIImageViewが一度に表示されるようにすると、失われたメモリのほとんどが解放されて回復します。
UPDATE2:私がこれを求めている理由は、私のアプリがメモリ不足のために実際にクラッシュしているためです。キャッシュして余分なメモリを使い果たしただけでもかまいませんが、didReceiveMmoryWarningの状態であっても、解放されることはないようです。