2014-04-30 7 views
0

경험 한 것처럼 액세스 할 수없는 스레드 안전 변수는 큰 두통입니다. iOS 하나의 간단한 솔루션을 사용하는 것입니다 들어 데이터를 확보하기 위해 NSLock을 추가합니다@synchronized이 고유 한 스레드가 액세스 할 수있는 키워드는, 단점은 다음과 같습니다 :다중 스레드 데타 액세스 문제, @ 동기화 및 직렬 대기열

  1. 잠금 너무 많은 크게 응용 프로그램의 성능이 저하됩니다 특히 주 스레드에 의해 호출 될 때.

  2. 논리가 복잡 해지면 데드락이 발생합니다.

    위의 고려 사항을 바탕으로

, 우리가 처리하는 일련 큐를 사용하는 것을 선호, 각 스레드 안전 중요한 작업이 큐의 끝에 추가합니다, 그것은 훌륭한 솔루션이지만, 문제는 모든 액세스 인터페이스입니다 asyn 스타일로 디자인해야합니다. 다음을 참조하십시오.

-(id)objectForKey:(NSString *)key; 

이 클래스를 호출하는 사람들은 이런 식으로 디자인하는 것을 꺼려하지 않습니다. 이 분야에 경험이있는 사람이라면 누구나 함께 나누고 토론하십시오.

+0

그래서 직렬 대기열은 잠금을 사용하지 않습니까? 그렇지 않으면 어떻게 부패하지 않습니까? 나는 그것을 사용하는 이점을 이해하지 못한다. – trojanfoe

+0

직렬 대기열이라 함은 더 큰 멀티 스레드 우주 안에 작은 단일 단일 스레드 우주가 있음을 의미합니다. 당신은 관심있는 리소스가 다른 어떤 것이 아니라 직렬 큐의 작업에 의해 액세스되는지를 확인합니다. 기본적으로 또 다른 직렬 대기열 인 메인 스레드에서만 수행해야하는 다른 작업과 같습니다. – gnasher729

+0

그러나 jianhua에게 실제로 질문 할 필요는 없습니까? – gnasher729

답변

0

마지막 솔루션은 작은 데이터를 저장하기 위해 NSUserDefault를 사용합니다. 대용량 캐시 데이터는 파일 자체에 보관됩니다.

Apple의 문서에서 NSUserDefault의 장점은 스레드로부터 안전하며 주기적으로 작업을 동기화합니다.