I'm Terrence

iOS图片加载

imageName:

(1)加载内存当中之后,会一直停留在内存当中,不会随着对象的销毁而销毁。

(2)加载进去图片之后,占用的内存归系统管理,我们无法管理。

(3)相同的图片,图片不会重复加载。

(4)加载到内存中后,占据内存空间较大。

imageWithContentsofFile:

(1)加载到内存当中后,占据内存空间较小。

(2)相同的图片会被重复加载内存当中。

(3)对象销毁的时候,加载到内存中图片会随着一起销毁。

结论

imageName:由于一直停留在ram,所以更适合于经常用到的,且不太大的图片。
而imageWithContentsofFile:更适合用于图片数据较大的情况,且比较少用到的情况。

这篇文章讲得比较细

load子工程image(适配iOS7)

+ (UIImage *)imageNamed:(NSString *)imageName withBundleName:(NSString *)bundleName
{
    NSBundle *bundle = [self bundleNamed:bundleName];
    if (SystemLessThan(8.0)) {
        NSString *path = [[bundle resourcePath] stringByAppendingPathComponent:imageName];
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        return image;
    }
    else {
        return [UIImage imageNamed:imageName inBundle:bundle compatibleWithTraitCollection:nil];
    }
}

+ (NSBundle *)bundleNamed:(NSString *)bundleName
{
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:bundleName ofType:@"bundle"];
    return [NSBundle bundleWithPath:bundlePath];
}