分配多个ALAssetsLibrary
实例而不是使用一个实例来访问多个资产的开销是多少?
从相反的方向来看,持有全局ALAssetsLibrary
实例以供一般使用是否有任何问题?它是线程安全的吗?
答案 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
那样使用“技巧”。