APSmartStorage
The smartest storage for network resources
Install / Use
/learn @Alterplay/APSmartStorageREADME
APSmartStorage helps to get data from network and automatically caches data on disk or in memory in a smart configurable way. Here is how the APSmartStorage flow diagram looks like:
<img src="https://dl.dropboxusercontent.com/u/2334198/APSmartStorage-git-illustration.png">

Features
- Load cached object from memory by URL
- Load cached object from file by URL
- Load object from network by URL
- Store loaded object to file
- Store loaded object to memory
- Parse loaded data from network (for instance, NSData to UIImage)
- Track loading progress
- Automatically purge memory cache on memory warning
- Set max object count to keep in memory to prevent memory overflow
- Set custom NSURLSessionConfiguration
Installation
Add APSmartStorage pod to Podfile
Using
Load object
Here is example how to use APSmartStorage to store images
// 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
}
}];
Very often you don't need to store downloaded object in memory. For instance, you perform some background download for future, and you don't want to keep this objects in memory right now.
[APSmartStorage.sharedInstance loadObjectWithURL:someURL storeInMemory:NO completion:^(id object, NSError *error)
{
// do something
}];
But if any method call sets storeInMemory:YES object will be stored in memory
Track load progress
[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
}];
Update stored object
Objects stored at files could become outdated after some time, and application should reload it from network
[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 objects from memory
// remove object from memory
[APSmartStorage.sharedInstance removeObjectWithURLFromMemory:objectURL];
// remove all objects form memory
[APSmartStorage.sharedInstance removeAllFromMemory];
Remove object from memory and delete file storage
// remove object from memory and remove it file
[APSmartStorage.sharedInstance removeObjectWithURLFromStorage:objectURL];
// remove all objects from memory and all storage files
[APSmartStorage.sharedInstance removeAllFromStorage];
This methods also cancel network requests. And if request has been cancelled, callbacks will run with
nilasobjectand with error with code 701.
Parse network and file data
If parsingBlock doesn't set you will receive raw NSData downloaded from network or read from file. So you should set one in most cases. If you need to parse data of different formats it will be a bit more complicated:
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];
}
};
Set max objects count to keep in memory
If max object count reached random object will be removed from memory before add next one
APSmartStorage.sharedInstance.maxObjectCount = 10;
Setup custom NSURLSessionConfiguration
APSmartStorage.sharedInstance.sessionConfiguration = sessionConfiguration;
History
=======================
If you have improvements or concerns, feel free to post an issue and write details.
Check out all Alterplay's GitHub projects. Email us with other ideas and projects.
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
