하나의 인스턴스를 사용하여 여러 자산에 액세스하는 대신 복수 ALAssetsLibrary
인스턴스를 할당하는 오버 헤드는 무엇입니까?ALAssetsLibrary 여러 인스턴스와 글로벌 인스턴스 오버 헤드
반대 방향에서 일반적인 ALAssetsLibrary
인스턴스를 일반적으로 사용하는 데 문제가 있습니까? 스레드로부터 안전합니까?
하나의 인스턴스를 사용하여 여러 자산에 액세스하는 대신 복수 ALAssetsLibrary
인스턴스를 할당하는 오버 헤드는 무엇입니까?ALAssetsLibrary 여러 인스턴스와 글로벌 인스턴스 오버 헤드
반대 방향에서 일반적인 ALAssetsLibrary
인스턴스를 일반적으로 사용하는 데 문제가 있습니까? 스레드로부터 안전합니까?
라이브러리 인스턴스에서 가져온 오브젝트의 수명은 라이브러리 인스턴스의 수명과 관련이 있습니다. 자산은 부모보다 오래 놀고 싶어하지 않습니다. 따라서 우리가 우리의 자산에 접근하려고한다면, 우리는 그들을 생성 한 라이브러리에 대한 참조를 유지해야합니다.
요점은 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)
스레드를 사용하십시오.
인스트루먼트를 사용하고 알아내는 것은 어떻습니까? – klcjr89
스레딩, 라이브러리 업데이트, 잠금 등 다른 문제가있을 수 있습니다. – Xyand