我想从文件系统将一些图像加载到我的应用程序中.有两种简单的方法可以做到这一点:
[UIImage imageNamed:fullFileName]
Run Code Online (Sandbox Code Playgroud)
要么:
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
[UIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个,因为它的代码少得多,但是我看到有些人说图像被缓存了,而且这个方法使用了更多的内存?由于我不相信大多数其他论坛上的人,我想我会在这里问这个问题,是否有任何实际的区别,如果是的话哪个更"好"?
我尝试使用对象分配工具分析我的应用程序,我看不出任何实际差异,虽然我只在模拟器中尝试过,而不是在iPhone本身上.
在创建使用时,使用该NSBundle方法搜索图像的路径有多必要?我看到教程代码只是直接指定图像的名称,然后代码更加努力地找到路径.pathForResourceUIImageimageNamed
根据我的经验,我一直只是直接使用这个名字而且它总是很好用.我以为它会自动知道如何找到图像.有多重要或在什么情况下需要做更多的事情?
我有一个大的UIScrollView,我正在放置3-4个相当大(320x1500像素左右)的UIImageView图像拼贴.我将这些UIImageViews添加到我的NIB文件内的滚动视图中.我的控制器上有一个插座,那就是UIScrollView.我正在使用一个属性(非原子,保留),并将其合并.
我的问题是:当我在Memory Monitor中观察到这一点时,我可以看到,当加载了所有这些图像的视图时(正如预期的那样),所使用的内存会相当大.但是当我离开视图时,它和它的控制器都是dealloc'd,但似乎并没有放弃它们占用的内存附近的任何地方.当我将其中一个视图(我的应用程序中有几个)切割成只有1-3个320x460的图像并将其他所有内容保持相同时,它会重新捕获内存.
使用这么大的图像有什么问题吗?我在这段代码中做错了什么(粘贴在下面)?
这是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 …Run Code Online (Sandbox Code Playgroud) 我想从我的应用文档库中将图像加载到UIImageView.我试图使用以下代码,但它无法正常工作.
UIImageView *background = [[[UIImageView alloc] initWithFrame:CGRectMake(3, 10, 48, 36)] autorelease];
[background setImage:[[UIImage imageAtPath:[[NSBundle mainBundle] pathForResource:@"Thumbnail-small" ofType:@"jpg" inDirectory:@"/Users/nbojja/Library/Application Support/iPhone Simulator/User/Applications/60C2E4EC-2FE0-4579-9F86-08CCF078216D/Documents/eb43ac64-8807-4250-8349-4b1f5ddd7d0d/9286371c-564f-40b4-99bd-a2aceb00a6d3/9"]]] retain]];
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我这样做.谢谢...
我正在编写一个应用程序,需要同时在内存中保存大约44 kb的JPEG.我听说应用程序在触发低内存警告之前可以使用大约22兆字节,所以我很确定它应该能够做到这一点.但是,一旦我传入一个兆字节的加载,这些消息就会在控制台中弹出:
Mon Jun 8 16:37:19 unknown configd[21] : kernel memory event (90), free: 374, active: 1736, inactive: 959, purgeable: 0, wired: 6260 Mon Jun 8 16:37:20 unknown configd[21] : kernel memory event (95), free: 363, active: 876, inactive: 492, purgeable: 0, wired: 6241 Mon Jun 8 16:37:20 unknown SpringBoard[22] : Memory level is critical (5%). No apps to kill. Will kill SpringBoard Mon Jun 8 16:37:24 unknown SpringBoard[22] : Jetsaming SpringBoard...
然后它将我转回主屏幕.
这是我用来加载图片的代码:
#define NUM_IMAGES 40
@interface MyClass : …Run Code Online (Sandbox Code Playgroud)