相关疑难解决方法(0)

[UIImage imageNamed ...]和[UIImage imageWithData ...]之间的区别?

我想从文件系统将一些图像加载到我的应用程序中.有两种简单的方法可以做到这一点:

[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本身上.

iphone cocoa-touch

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

UIImage imageNamed需要pathForResource吗?

在创建使用时,使用该NSBundle方法搜索图像的路径有多必要?我看到教程代码只是直接指定图像的名称,然后代码更加努力地找到路径.pathForResourceUIImageimageNamed

根据我的经验,我一直只是直接使用这个名字而且它总是很好用.我以为它会自动知道如何找到图像.有多重要或在什么情况下需要做更多的事情?

iphone objective-c uiimage nsbundle

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

问题是在UIScrollView中使用相当大的图像来释放UIImageViews所使用的内存

我有一个大的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)

iphone cocoa-touch memory-management objective-c

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

从iPhone中的文档目录加载图像

我想从我的应用文档库中将图像加载到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)

有人可以帮助我这样做.谢谢...

iphone

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

为什么加载超过一兆字节的图像会占用我所有的iPhone内存?

我正在编写一个应用程序,需要同时在内存中保存大约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)

memory iphone memory-management uiimage

3
推荐指数
1
解决办法
749
查看次数