美文网首页
iOS-UIImage初始化一张图片的方法及优缺点

iOS-UIImage初始化一张图片的方法及优缺点

作者: Simple_Code | 来源:发表于2018-09-21 11:58 被阅读47次

    方法一:使用类方法imageNamed:创建

    UIImage *image = [UIImage imageNamed:@"ganggang"];  
    

    这个方法创建的图片是从缓存里面获取的,先在缓存里查看,看是不是有这个图片,没有的话先把图片添加到缓存再使用。有的话直接使用缓存里面的。

    优点:一旦加入到缓存中就在内存中,不用再次加载。
    缺点:一旦加入到缓存中就一直占用内存,不能被释放掉。

    使用情况:如果这个图片要在多个地方使用的话,建议使用这个方法。

    方法二:使用类方法imageWithContentsOfFile:创建

    NSString *imagePath = [NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
    [UIImage imageWithContentsOfFile:imagePath];
    

    使用imageWithContentsOfFile:创建UIImage的时候,是直接从磁盘上加载。当收到内存警告时,UIImage对象会被释放,下一次绘图的时候,需要重新加载。

    优点:当收到内存警告时,UIImage对象会被释放。
    缺点:下一次绘图的时候,需要重新加载。

    使用情况:建议使用频率比较低的图片采用该种方法

    方法三:使用类方法imageWithData:创建(一般使用比较少)

    // 下面的这种方式会出现卡线程的情况,所以建议在子线程中操作
    // imageWithData: data
    NSURL *url = [NSURL URLWithString:@"http://e.109d0f5555c5cec3fdfc032302.jpg?referer=f55e30e2d71373f0ac285aaf8d00&x=.jpg"];
    UIImage *image2 = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
    

    需要注意的是,如果imageWithData:是同步网络请求,如果在主线程直接使用的话,会卡主线程,因此一般不会在主线程中直接使用,而是采用异步网络请求获得data的值。

    相关文章

      网友评论

          本文标题:iOS-UIImage初始化一张图片的方法及优缺点

          本文链接:https://www.haomeiwen.com/subject/aojanftx.html