【问题标题】:UIImage initWithContentsOfFile doesn't workUIImage initWithContentsOfFile 不起作用
【发布时间】:2011-11-23 10:21:23
【问题描述】:

我有一个问题:我想避免 [UIImage imageNamed:]。 所以我做到了:

UIImage *prodImg = [[UIImage alloc] initWithContentsOfFile:@"myimage.png"]; 
controller.productImg.image = prodImg;  
[prodImg release];

但现在图像不再显示了。

有人知道如何让它工作吗?

【问题讨论】:

  • 好的,我用 UIImage *prodImg = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"my image" ofType:@"png"]];
  • 建议:只使用[UIImage imageNamed:@"myimage.png"],因为它添加了缓存和设备扩展(“@2x”、“~ipad”)逻辑
  • 使用 [UIImage imageNamed:@"myimage.png"] 我收到内存警告,请参阅此处alexcurylo.com/blog/2009/01/13/imagenamed-is-evil
  • 这可能是因为您长时间使用 UIImages.. 如果您只是将它分配给 UIImageView 并且不保留它,那么您会没事的。并且在 iOS 上使用 jpg-Files 对内存消耗很危险(使用 png-format 和 pngcrush -iphone 命令行工具)。
  • imageNamed 的 +1 是邪恶的。看到完全一样的效果。建议的解决方案消除了内存不足警告并消除了崩溃。

标签: objective-c xcode uiimage imagenamed initwithcontentsoffile


【解决方案1】:

上面的代码不起作用,因为正确的方法是-

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"jpeg"];
UIImage *prodImg = [UIImage imageWithContentsOfFile:thePath]; 
controller.productImg.image = prodImg;  
[prodImg release];

;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多