경험 한 것처럼 액세스 할 수없는 스레드 안전 변수는 큰 두통입니다. iOS
하나의 간단한 솔루션을 사용하는 것입니다 들어 데이터를 확보하기 위해 NSLock
을 추가합니다@synchronized
이 고유 한 스레드가 액세스 할 수있는 키워드는, 단점은 다음과 같습니다 :다중 스레드 데타 액세스 문제, @ 동기화 및 직렬 대기열
잠금 너무 많은 크게 응용 프로그램의 성능이 저하됩니다 특히 주 스레드에 의해 호출 될 때.
논리가 복잡 해지면 데드락이 발생합니다.
위의 고려 사항을 바탕으로
, 우리가 처리하는 일련 큐를 사용하는 것을 선호, 각 스레드 안전 중요한 작업이 큐의 끝에 추가합니다, 그것은 훌륭한 솔루션이지만, 문제는 모든 액세스 인터페이스입니다 asyn 스타일로 디자인해야합니다. 다음을 참조하십시오.
-(id)objectForKey:(NSString *)key;
이 클래스를 호출하는 사람들은 이런 식으로 디자인하는 것을 꺼려하지 않습니다. 이 분야에 경험이있는 사람이라면 누구나 함께 나누고 토론하십시오.
그래서 직렬 대기열은 잠금을 사용하지 않습니까? 그렇지 않으면 어떻게 부패하지 않습니까? 나는 그것을 사용하는 이점을 이해하지 못한다. – trojanfoe
직렬 대기열이라 함은 더 큰 멀티 스레드 우주 안에 작은 단일 단일 스레드 우주가 있음을 의미합니다. 당신은 관심있는 리소스가 다른 어떤 것이 아니라 직렬 큐의 작업에 의해 액세스되는지를 확인합니다. 기본적으로 또 다른 직렬 대기열 인 메인 스레드에서만 수행해야하는 다른 작업과 같습니다. – gnasher729
그러나 jianhua에게 실제로 질문 할 필요는 없습니까? – gnasher729