ALAssetsLibrary多个实例与全局实例开销

时间:2014-07-15 15:10:42

标签: ios objective-c cocoa-touch alassetslibrary alasset

分配多个ALAssetsLibrary实例而不是使用一个实例来访问多个资产的开销是多少?

从相反的方向来看,持有全局ALAssetsLibrary实例以供一般使用是否有任何问题?它是线程安全的吗?

1 个答案:

答案 0 :(得分:0)

从库实例返回的对象的生命周期与库实例的生命周期相关联。资产不喜欢比父母更长时间闲逛。因此,如果我们要访问我们的资产,我们需要保留对创建它们的库的引用。

关键是我们必须确保ALAssetsLibrary的实例在内存中保留,直到我们使用随其检索的ALAssets为止。为了确保这一点,我们必须添加一个静态方法来检索该类的共享实例(或多或少像一个单例):

+ (ALAssetsLibrary *)defaultAssetsLibrary {
    static dispatch_once_t pred = 0;
    static ALAssetsLibrary *library = nil;
    dispatch_once(&pred, ^{
        library = [[ALAssetsLibrary alloc] init];
    });
    return library; 
}

所以,我们可以通过我的类使用[MyAssetsManager defaultAssetsLibrary]来引用它,我们可以使用线程(NSOperations an NSOperationQueues),而不必像performSelectorOnMainThread那样使用“技巧”。