标签: imagenamed

消除UIImage图像命名:FUD

编辑2014年2月:请注意,这个问题可以追溯到iOS 2.0!从那时起,图像要求和处理已经发生了很大变化.Retina使图像更大,加载它们稍微复杂一些.内置支持iPad和视网膜图像,您当然应该在代码中使用ImageNamed.

我看到很多人都说imageNamed不好,但同样数量的人说性能很好 - 特别是在渲染时UITableView.例如,在iPhoneDeveloperTips.com上查看此SO问题本文

UIImageimageNamed用于泄漏的方法因此最好避免,但在最近的版本中已得到修复.我想更好地理解缓存算法,以便做出合理的决定,我可以信任系统来缓存我的图像,以及我需要加倍努力并自己完成.我目前的基本理解是它是一个简单NSMutableDictionaryUIImages文件名引用.它变得越来越大,当内存耗尽时,它会变得更小.

例如,有没有人确切知道后面的图像缓存imageNamed没有响应didReceiveMemoryWarning?Apple似乎不太可能不这样做.

如果您对缓存算法有任何了解,请在此处发布.

iphone caching uikit uiimageview imagenamed

117
推荐指数
2
解决办法
3万
查看次数

UIImage imageNamed返回nil

我是iOS和Xcode的新手.

我尝试加载图像

[UIImage imageNamed:@"imageName.png/jpg and so on"];
Run Code Online (Sandbox Code Playgroud)

但它只返回零.图像应该在我的项目包中,考虑到我可以从InterfaceBuilder中的拖放菜单中选择它,并通过"添加文件到"项目名"..."菜单将其添加到Xcode中.

我使用.png或.jpg图像没有区别,结果保持不变:它们通过IB工作,但如果我尝试自己运行imageNamed方法则不行.

xcode uiimage imagenamed ios

46
推荐指数
6
解决办法
6万
查看次数

JPG图像不会加载UIImage imageNamed

我在iOS版本4的参考文献中读到了+使用object 的方法imageNamed,UIImage不需要文件扩展名.

UIImage课堂参考:

特别注意事项.

在iOS 4及更高版本中,不需要文件名来指定文件扩展名.在iOS 4之前,您必须指定文件扩展名.

但似乎这只适用于PNG文件.

如果我的代码是:

[UIImage imageNamed:@"test"];
Run Code Online (Sandbox Code Playgroud)
  • 仅当文件是时才加载图像 test.png
  • 如果是,图像不会加载test.jpg.

对我来说这是一个很大的问题,因为我需要保持一个动态的图像加载(我不知道在运行时,如果我想加载图像pngjpg).

你能帮帮我吗?
谢谢.

uiimage imagenamed ios

20
推荐指数
1
解决办法
7142
查看次数

使用没有imageNamed的xcassets来防止内存问题?

根据Apple文档,建议在iOS7应用程序中使用xcassets,并通过imageNamed引用这些图像.

但据我所知,imageNamed和内存总是存在问题.

所以我做了一个简短的测试应用程序 - 使用imageNamed从xcassets目录中引用图像并启动了分析器...结果如预期的那样.一旦分配的内存没有再次释放,即使我从superview中删除了ImageView并将其设置为nil.

我目前正在开发一个带有许多大图像的iPad应用程序,这种奇怪的imageView行为会导致内存警告.

但在我的测试中,我无法通过imageWithContentsOfFile访问xcassets图像.

那么在iOS7上使用大图像的最佳方法是什么?有没有办法以另一种(更高性能)的方式从xcassets目录访问图像?或者我不应该使用xcassets,以便我可以使用imageWithContentsOfFile?

谢谢您的回答!

memory-leaks imagenamed ios7 xcasset

20
推荐指数
1
解决办法
4775
查看次数

UIImage initWithContentsOfFile不起作用

我有疑问:我想避免[UIImage imageNamed:].所以我做了:

UIImage *prodImg = [[UIImage alloc] initWithContentsOfFile:@"myimage.png"]; 
controller.productImg.image = prodImg;  
[prodImg release];
Run Code Online (Sandbox Code Playgroud)

但现在图像不再显示了.

有谁知道如何让它工作?

xcode objective-c uiimage imagenamed initwithcontentsoffile

12
推荐指数
1
解决办法
1万
查看次数

如何使[UIImage imageWithContentsOfFile:]和高分辨率图像工作

正如许多人抱怨的那样,在用于Retina显示器的Apple SDK中,似乎存在一个错误,而imageWithContentsOfFile实际上并不会自动加载2x图像.

我偶然发现了一个很好的帖子,如何制作一个能够检测UIScreen比例因子并正确加载低或高分辨率图像的功能(http://atastypixel.com/blog/uiimage-resolution-independence-and-the-iphone-4s -retina-display /),但该解决方案加载2x图像并仍然将图像的比例因子设置为1.0,这导致2倍图像缩放2倍(因此,比它看起来大4倍)

imageNamed似乎可以准确地加载低分辨率和高分辨率图像,但对我来说不是一个选择.

有没有人有一个解决方案来加载低/高分辨率图像不使用imageNamed或imageWithContentsOfFile的自动加载?(或者最终解决方法如何使imageWithContentsOfFile工作正确)

objective-c high-resolution uiimage imagenamed ios4

11
推荐指数
5
解决办法
3万
查看次数

使用xcassets中的imageNamed加载NSImage会在较旧的osx版本中崩溃

所以,我有一个xcassets,在很多应用程序之间共享.我正在Mac Mini中使用Xcode8进行开发,其中安装了MacOs Sierra.如果我在开发机器中编译并运行,则根本没有问题.但是,当我尝试在OSX Mavericks的设备中运行它时,我遇到了崩溃.这是报告中的痕迹

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff887dc866 __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff87a3935c pthread_kill + 92
2   libsystem_c.dylib               0x00007fff88614bba abort + 125
3   libsystem_c.dylib               0x00007fff885dea5f __assert_rtn + 321
4   com.apple.coreui                0x00007fff875aa1a7 CUIRenditionKeySetValueForAttribute + 307
5   com.apple.coreui                0x00007fff875a9004 -[CUIStructuredThemeStore _canGetRenditionWithKey:isFPO:lookForSubstitutions:] + 200
6   com.apple.coreui                0x00007fff875a8f1b -[CUIStructuredThemeStore canGetRenditionWithKey:] + 22
7   com.apple.coreui                0x00007fff875c4eab -[CUICatalog _resolvedRenditionKeyForName:scaleFactor:deviceIdiom:deviceSubtype:] + 291
8   com.apple.coreui                0x00007fff875c4c53 -[CUICatalog imageWithName:scaleFactor:deviceIdiom:deviceSubtype:] + 29
9   com.apple.AppKit                0x00007fff88820b1b +[NSImage _catalogImageWithName:bundle:] + 132
10  com.apple.AppKit                0x00007fff8881aefd +[NSImage imageNamed:] …
Run Code Online (Sandbox Code Playgroud)

macos xcode nsimage imagenamed

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

(iphone)imageNamed有多个同名文件?

问题是,当资源目录下有多个具有给定名称的文件时,imageNamed如何工作?

有没有办法区分具有相同名称(但路径不同)的两个不同文件?

谢谢

iphone imagenamed

7
推荐指数
1
解决办法
2157
查看次数

UIImage:imageWithContentsOfFile在iOS 5.0中慢10倍

在新发布的iOS 5.0 SDK上重新编译我们的iPhone应用程序后,我遇到了一个奇怪的问题 - 所有UIImage:imageNamed(第一次调用实际图像加载)和UIImage:imageWithContentsOfFile开始工作比之前慢10倍.我设法缩小问题:这只是jpeg和png文件(不是GIF!)的情况,这不是因为文件大小.即使直接加载小型32*32 png也需要大约300ms ...相比之下老式设备需要30ms(在3.1和4.3.5上使用完全相同的代码检查)

我还试图通过这个代码通过新引入的CIImage加载图像

WLLog(@"Data loading...");
NSData *imageData = [NSData dataWithContentsOfFile:path];
WLLog(@"CIImage creation...");
CIImage* cii = [CIImage imageWithData:imageData];
WLLog(@"CIImage creation ok...");
float scle = 1.0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    scle = [[UIScreen mainScreen] scale];
}
#endif
CIContext *context = [CIContext contextWithOptions:nil];
UIImage* res5 = [[UIImage alloc] init];
WLLog(@"UIImage creation...");
[res5 initWithCGImage:[context createCGImage:cii fromRect:cii.extent] scale:scle orientation:UIImageOrientationUp];
WLLog(@"Done!");
Run Code Online (Sandbox Code Playgroud)

没有任何运气......这一行

CIImage* cii = [CIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)

即使在小图像(4Kb png)上也需要相同的300毫秒.imho,根本没有什么可以解析的!

有没有什么可以解决加载时间这种奇怪的变化?现在它似乎在sdk内部发生了巨大的变化:(

iphone uiimage imagenamed ios5

7
推荐指数
1
解决办法
4958
查看次数

在UIImage imageNamed中使用外部图像

我正在从网上Apple.png和Apple@2x.png下载两张图片.我想使用[UIImage imageNamed:@"Apple.png"]它,因此它可以使用内置功能来检测它是否应该显示Apple.png或Apple@2x.png.

现在我在哪里存储这些图像?我在文档中阅读了以下内容:

文件的名称.如果这是第一次加载图像,则该方法在应用程序的主包中查找具有指定名称的图像.

啊所以应用程序的主要包是要走的路.这就是我的代码:

NSString      *directory   = [[NSBundle mainBundle] bundlePath]; 
NSString      *path        = [directory stringByAppendingPathComponent:imageName];
NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager createFileAtPath:path contents:dataFetcher.receivedData attributes:nil];
Run Code Online (Sandbox Code Playgroud)

我检查了文件是否在路径的文件夹中创建,这是正确的.我还在我的项目文件中拖了一个Example.png,看看它是否存储在同一个文件夹中,这也是正确的.

但是,[UIImage imageNamed:@"Apple.png"]仍然无法获取图像.

iphone objective-c uiimage imagenamed ios

5
推荐指数
1
解决办法
3404
查看次数