2014-07-15 9 views
0

하나의 인스턴스를 사용하여 여러 자산에 액세스하는 대신 복수 ALAssetsLibrary 인스턴스를 할당하는 오버 헤드는 무엇입니까?ALAssetsLibrary 여러 인스턴스와 글로벌 인스턴스 오버 헤드

반대 방향에서 일반적인 ALAssetsLibrary 인스턴스를 일반적으로 사용하는 데 문제가 있습니까? 스레드로부터 안전합니까?

+0

인스트루먼트를 사용하고 알아내는 것은 어떻습니까? – klcjr89

+0

스레딩, 라이브러리 업데이트, 잠금 등 다른 문제가있을 수 있습니다. – Xyand

답변

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]를 사용에 우리가 참조 할 수 있으며, 우리가 할 수있는 performSelectorOnMainThread처럼 "트릭"을 사용할 필요없이 (NSOperations an NSOperationQueues) 스레드를 사용하십시오.