APSmartStorage 0.1.4

APSmartStorage 0.1.4

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最后发布2015年2月

Alexey Belkevich 维护。



 
依赖
APAsyncDictionary= 0.0.6
MD5Digest= 0.1.0
 

  • 作者
  • Alexey Belkevich

APSmartStorage 帮助从网络获取数据,并以智能可配置的方式自动在磁盘或内存中缓存数据。以下是 APSmartStorage 流程图的样式:

特点

  • 通过 URL 从 内存 加载缓存的对象
  • 通过 URL 从 文件 加载缓存的对象
  • 通过 URL 从 网络 加载对象
  • 将加载的对象存储到 文件
  • 将加载的对象存储到 内存
  • 解析来自网络的数据加载(例如,从 NSDataUIImage
  • 跟踪加载进度
  • 内存警告 时自动清理内存缓存
  • 设置要保留在内存中的最大对象数以防止内存溢出
  • 设置自定义 NSURLSessionConfiguration

安装

APSmartStorage pod 添加到 Podfile

使用方法

加载对象

以下是如何使用 APSmartStorage 存储图片的示例

// setup data parsing block
APSmartStorage.sharedInstance.parsingBlock = ^(NSData *data, NSURL *url)
{
    return [UIImage imageWithData:data scale:UIScreen.mainScreen.scale];
};
...
// show some progress/activity
...
// load object with URL
[APSmartStorage.sharedInstance loadObjectWithURL:imageURL completion:^(id object, NSError *error)
{
    // hide progress/activity
    if (error)
    {
        // show error
    }
    else 
    {
        // do something with object
    }
}];

通常您不需要将下载的对象存储在内存中。例如,您执行一些未来的后台下载,但您现在不想在内存中保留这些对象。

[APSmartStorage.sharedInstance loadObjectWithURL:someURL storeInMemory:NO completion:^(id object, NSError *error)
{
    // do something
}];

但是,如果任何方法调用设置 storeInMemory:YES 对象将被存储在内存中

跟踪加载进度
[APSmartStorage.sharedInstance loadObjectWithURL:someURL storeInMemory:NO progress:^(NSUInteger percents)
{
    // show progress percents value is between 0 and 100
}                                     completion:^(id object, NSError *error)
{
    // do something
}];
更新存储对象

存储在文件中的对象可能在一段时间后变得过时,应用应该从网络重新加载它

[APSmartStorage.sharedInstance reloadObjectWithURL:objectURL completion:(id object, NSError *error)
{
    if (error)
    {
        // show error and do something like use outdated version of object
    }
    else
    {
        // do something with object
    }
}];
从内存中删除对象
// remove object from memory
[APSmartStorage.sharedInstance removeObjectWithURLFromMemory:objectURL];
// remove all objects form memory
[APSmartStorage.sharedInstance removeAllFromMemory];
从内存中删除对象并删除文件存储
// remove object from memory and remove it file
[APSmartStorage.sharedInstance removeObjectWithURLFromStorage:objectURL];
// remove all objects from memory and all storage files
[APSmartStorage.sharedInstance removeAllFromStorage];

此方法也会取消网络请求。如果请求已被取消,回调将使用nil作为object执行,并带有代码701的错误。

解析网络和文件数据

如果parsingBlock没有设置,您将收到从网络下载的原始NSData或从文件读入的数据。所以大多数情况下您都应该设置一个。如果需要解析不同格式的数据,将会稍微复杂一些。

APSmartStorage.sharedInstance.parsingBlock = ^(NSData *data, NSURL *url)
{
    // is URL of image
    if ([url isImageURL])
    {
        return [UIImage imageWithData:data scale:UIScreen.mainScreen.scale];
    }
    // this is URL of something else
    else
    {
        return [SomeObject objectWithData:data];
    }
};
设置内存中保留的最大对象数量

如果达到最大对象数量,则在添加下一个对象之前,会随机从内存中移除一个对象。

APSmartStorage.sharedInstance.maxObjectCount = 10;
设置自定义的 NSURLSessionConfiguration
APSmartStorage.sharedInstance.sessionConfiguration = sessionConfiguration;

历史记录

版本 0.1.3

版本 0.1.2

  • 增加了跟踪加载数据的进度
  • 更改了方法名称

版本 0.1.1

  • 增加了防止对象保存在内存中的能力

版本 0.1.0

  • 增加了在移除对象时取消网络请求的功能
  • 更改了方法名称

版本 0.0.7

  • 改善了回调,如果对象已存在于内存中,则立即执行

版本 0.0.6

  • 修复了将"nil"对象设置到内存存储时崩溃的问题

版本 0.0.5

  • 公开发布

githalytics.com alpha如果您有任何改进或关注的问题,请随时提交一个问题并写下详细信息。

查看的所有Alterplay GitHub项目。联系我们并提供其他想法和项目。