GBLoading 2.4.0

GBLoading 2.4.0

测试已测试
语言语言 Obj-CObjective C
许可 Apache 2
发布最新发布2014年12月

Luka Mirosevic 维护。



GBLoading 2.4.0

  • Luka Mirosevic

GBLoading  

一个优雅、轻量级且最重要的健壮异步资源加载库,适用于iOS。

基本用法

要异步加载资源,只需调用(您的成功和失败处理程序将在主线程上调用)

[[GBLoading sharedLoading] loadResource:@"http://..." withSuccess:^(id object) {
    //do something with loaded object
} failure:^(BOOL isCancelled) {
    NSLog(@"failed to load");
}];

就是这样。由于在主线程上调用,您可以在处理程序中调用任何UIKit方法,即使资源是在后台线程上加载的。

别忘了导入静态库头文件(在iOS上)

#import "GBLoading.h"

高级用法

您可以将任意多的处理程序与资源加载关联起来,因此如果您多次调用上面的内容来加载同一资源,但使用了不同的处理程序,一旦资源可用,所有处理程序都会依次调用,数据也只会下载一次!

如果网络来的资源需要一些重量级的处理,您可以在回调主线程之前在后台线程上执行这些操作。为此,您可以提供一个处理从网络接收到的原始数据的块。

[[GBLoading sharedLoading] loadResource:@"http://..." withBackgroundProcessor:^id(NSData *rawData) {
    return [UIImage imageWithData:rawData];
} success:^(id object) {
    UIImage *loadedImage = (UIImage *)object;
    someImageView.image = loadedImage;
    //do something with loaded image
} failure:^(BOOL isCancelled) {
    NSLog(@"failed to load");
}];

与上述相同,处理仅在一次网络初始加载后发生一次,保持您的应用运行顺畅。如果您需要始终重新处理,只需将此逻辑放在成功处理程序中即可。

如果您需要取消加载调用,请调用此方法

[[GBLoading sharedLoading] cancelLoadForResource:@"http://"];

但是请注意,这将取消特定加载的所有处理程序(如果您有多个)。

如果您希望取消特定的加载,则应向GBLoading提供GBLoadingCanceller指针。GBLoadingCanceller是一个非常简单的对象,只有一个方法:-[GBLoadingCanceller cancelLoad]。您会使用此方法来取消非常具体的加载,例如当UITableViewCell移出屏幕时(在这种情况下,您永远不想取消所有加载,因为另一个单元格可能请求了相同的资源)。

GBLoadingCanceller *canceller;

[[GBLoading sharedLoading] loadResource:@"http://..." withBackgroundProcessor:^id(id inputObject) {
    return [UIImage imageWithData:inputObject];
} success:^(id object) {
    UIImage *loadedImage = (UIImage *)object;
    //do something with loaded image
} failure:^(BOOL isCancelled) {
    NSLog(@"failed to load");
} canceller:&canceller];

然后,要实际取消,您会调用

//...some time later, e.g. when your UITableViewCell goes of screen
[canceller cancel];

我个人喜欢在 -[UITableView cellForRowAtIndexPath:] 中将 canceller 对象设置为 UITableViewCell 的关联对象,这样即使单元格移动,它也会跟随移动。随后,在 -[UITableView tableView:didEndDisplayingCell:forRowAtIndexPath:](或 -[UITableViewCell prepareForReuse])中,从单元格中检索关联对象,并对其调用 cancel。这种方式非常稳健,而且最重要的是非常简单;它避免了你需要在自身数据结构中跟踪正在进行的操作,以及指定单元格与特定加载数据关联,以及与表格资源异步加载相关的一般噩梦。如果你不喜欢运行时修改,可以在你特定的 UITableViewCell 子类中添加一个用于取消器的属性。取消器对象非常轻量级:只有1个方法实现和1个私有对象引用,所以它们几乎不会给你的单元格增加任何负担。

如果你收到内存警告,或者出于任何其他原因想要清除缓存,你可以这样做,但如果你随后再次请求相同的资源(将需要重新下载和处理)。

[[GBLoading sharedLoading] clearCache];

如果你需要更细粒度的缓存控制,你可以移除特定的资源。

[[GBLoading sharedLoading] removeResourceFromCache:@"http://"];

如果你出于任何原因想要创建自己的 GBLoading 实例,这样做是安全的。它们之间不会相互干扰。

GBLoading *anotherInstance = [GBLoading new];

依赖项

兼容 iOS 5 及以上版本。

版权与许可证

版权声明 © 2013 Luka Mirosevic

根据 Apache 许可证 2.0 版(“许可证”);除非遵守许可证规定,否则不允许使用此作品。您可以在此文件中或通过以下链接获得许可证副本:https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或以书面形式达成协议,否则根据许可证分发的软件以“现状”为基础,不提供任何明示或暗示的保证。有关许可证的具体语言管理权限和限制,请参阅许可证。

CocoaPods 是由以下团队和人员创建的项目,他们贡献了代码或文档: