【问题标题】:Trouble with CALayerCALayer 的问题
【发布时间】:2012-07-19 19:37:30
【问题描述】:

我有这段代码,XCode Analyze 没有发出任何警告,但是每次我在控制台中收到一条消息:

2012-07-19 23:15:35.122 AttachIt [5725:907] 收到内存警告。

我的错误在哪里,请指出。

for(int j=0;j<images;j++){
    @autoreleasepool {
        NSInteger currentRow = 0;

        for(int k = 0; k<i;k++)
            currentRow = currentRow + [[assetGroups objectAtIndex:k] numberOfAssets];

        asset = [assets objectAtIndex:j+currentRow];
        float size = [self getRandomNumberBetweenMin:60.0 andMax:65.0];
        CGRect rect;
        if(iPad)
            rect = CGRectMake(10+j*35.5, 75-size, size, size);
        else
            rect = CGRectMake(10+j*26, 75-size, size, size);
        UIImageView *temp = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:[asset thumbnail]]];
        temp.frame = rect;
        temp.layer.backgroundColor = [UIColor blueColor].CGColor;
        temp.layer.shadowOffset = CGSizeMake(0, 3);
        temp.layer.shadowRadius = 5.0;
        temp.layer.shadowColor = [UIColor blackColor].CGColor;
        temp.layer.shadowOpacity = 0.8;
        temp.layer.masksToBounds = NO;
        temp.layer.borderColor = [[UIColor whiteColor] CGColor];
        temp.layer.borderWidth = 2;
        [temp setTransform:CGAffineTransformMakeRotation(degreesToRadians([self getRandomNumberBetweenMin:-5 andMax:5]))];
        temp.layer.shouldRasterize = TRUE;
        [albumRow addSubview:temp];
    }
}

【问题讨论】:

  • images 变量的值是多少?
  • int 图像; 1 到 10 之间的值
  • 现在在 XCode 4.5 下测试这个项目,没有任何警告,但在 XCode 4.3.3 下我有一个警告
  • 在检查 ARC 兼容之前:@interface CollageViewController : UIViewController &lt;UIScrollViewDelegate&gt;{ IBOutlet UIScrollView *weak collageView; }@interface CollageViewController : UIViewController &lt;UIScrollViewDelegate&gt;{ IBOutlet UIScrollView *__weak collageView; } 之后结束

标签: ios xcode calayer


【解决方案1】:

内存警告不是错误的结果;它们是在 iOS 上运行的正常部分。你正在分配一堆东西,所以收到内存警告并不奇怪。

如果您的应用因内存使用过多而被系统杀死,您可能会考虑随着时间的推移而不是循环填充这些图像。您可以通过 NSOperationQueue 或类似机制一次加载一个图像来完成此操作。

在任何情况下,您都可以使用“分配”或“活动监视器”工具来查看您的内存使用量是否在增长以及增长了多少。

【讨论】:

  • 谢谢。也许你可以告诉我如何运行函数并在运行下一个函数之前等待他的完成。 dispatch_async(dispatch_get_main_queue(), ^{ activity.hidden = false; }); 不适合我的情况
  • 我不确定你的意思。我认为您上面的代码对于少量图像来说看起来不错。对于大量数据,您可能希望在后台线程上加载资产,然后将它们异步传递给 UI,而不是在主线程上阻塞。
猜你喜欢
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2010-11-21
相关资源
最近更新 更多