iOS应用性能调优的25个建议和技巧(10)

    xiaoxiao2021-12-01  60

    10. Cache, Cache, 还是Cache!

    一个极好的原则就是,缓存所需要的,也就是那些不大可能改变但是需要经常读取的东西。

    我们能缓存些什么呢?一些选项是,远端服务器的响应,图片,甚至计算结果,比如UITableView的行高。

    NSURLConnection默认会缓存资源在内存或者存储中根据它所加载的HTTP Headers。你甚至可以手动创建一个NSURLRequest然后使它只加载缓存的值。

    下面是一个可用的代码段,你可以可以用它去为一个基本不会改变的图片创建一个NSURLRequest并缓存它:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    + (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url {

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

     

        request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;// this will make sure the request always returns the cached image

        request.HTTPShouldHandleCookies = NO;

        request.HTTPShouldUsePipelining = YES;

        [request addValue:@"image/*"forHTTPHeaderField:@"Accept"];

     

        returnrequest;

    }

     

    注意你可以通过 NSURLConnection 获取一个URL request AFNetworking也一样的。这样你就不必为采用这条tip而改变所有的networking代码了。

    如果想了解更多关于HTTP caching, NSURLCache, NSURLConnection的相关知识,可以读下这篇文章()

    如果你需要缓存其它不是HTTP Request的东西,你可以用NSCache

    NSCacheNSDictionary类似,不同的是系统回收内存的时候它会自动删掉它的内容。 Mattt Thompson有一篇很棒的关于它的文章::http://nshipster.com/nscache/

    如果你对HTTP感兴趣可以读下Google的这篇best-practices document on HTTP caching

    转载请注明原文地址: https://ju.6miu.com/read-679398.html

    最新回复(0)