相关疑难解决方法(0)

达到内存限制时NSCache崩溃(仅限iOS 7)

我们在我们的应用程序中使用NSCache进行UIImages.这适用于小于7的iOS版本.当发生内存警告时,NSCache会按预期释放对象.但是,在iOS 7上,我们的应用程序在第一次内存警告后不久崩溃.因此,似乎从未发布与NSCache一起存储的对象,但缓存正在增长,直到应用程序崩溃.用仪器进行分析证实了这种怀疑.

是否有其他人遇到此问题,您是否找到了解决方法或已经跟踪错误?

看起来这些人有同样的问题:http://www.photosmithapp.com/index.php/2013/10/photosmith-3-0-2-photo-caching-and-ios-7/

我创建了一个小样本应用程序来说明问题.按下按钮时,将-(IBAction)fillCache:(id)sender调用该方法.从那时起,计时器-(void)addImageToCache:(id)sender每100毫秒调用一次.在此方法中,生成UIImage并将其写入缓存.

在带有iOS 7.0.3的iPad Mini及其512 MB内存中,它在约350次迭代后崩溃.

在具有iOS 5和512 MB内存的iPad 2上,它在某些时候也会崩溃,但仅在至少3000次迭代之后才会崩溃.仪器显示每次发生内存警告时,UIImage实例的数量会减少.在iOS 7上并非如此.

- (IBAction)fillCache:(id)sender
{
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(addImageToCache:) userInfo:nil repeats:YES];
}

- (void)addImageToCache:(id)sender
{
    @autoreleasepool {

        CGRect rect = CGRectMake(0, 0, 500, 500);
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        NSString *poolKey = [NSString stringWithFormat:@"junk_%d", count++];
        [self.cache setObject:image forKey:poolKey];

    }
}
Run Code Online (Sandbox Code Playgroud)

memory objective-c nscache ios7

8
推荐指数
1
解决办法
6431
查看次数

标签 统计

ios7 ×1

memory ×1

nscache ×1

objective-c ×1