【问题标题】:ALAssetsLibrary multiple instances vs global instance overheadALAssetsLibrary 多个实例与全局实例开销
【发布时间】:2014-07-15 15:10:41
【问题描述】:

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

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

【问题讨论】:

  • 为什么不使用 Instruments 并找出答案?
  • 可能还有其他问题:线程、库更新、锁定等

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


【解决方案1】:

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

关键是我们必须确保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 这样的“技巧”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多