주 스레드와 상호 작용하지 않고 백그라운드에서 작업해야하는 정적 라이브러리를 개발 중입니다. 아이디어를 얻으려면 일부 사용자 이벤트 만 로깅하는 것이 좋습니다. 라이브러리는 사용자가 앱을 종료하거나 배경으로 보냅니다 (홈 버튼을 밀기 전까지)이 작업을 계속해야합니다. 즉 루프 내에서 계속 작업해야합니다.NSThread 또는 NSOperation 내부에서 NSUrlConnection 사용
메인 앱 스레드와 스폰 된 스레드 간의 유일한 상호 작용은 메인 앱 스레드가 스폰 된 스레드가 읽고 소비 할 수있는 대기열에 일정 항목 (이벤트 객체)을 넣는 경우가 종종 있습니다. 그 이외에, 스폰 된 스레드는 앱이 존재하거나 배경이 될 때까지 계속 진행됩니다.
스폰 된 스레드가 수행해야하는 작업 (일부는 아니지만)에는 HTTP 서버에 데이터를 보내는 작업이 포함됩니다. 나는 NSThread를 서브 클래스 화하고 main 메소드를 오버라이드 (override)하는 것이 쉬우 며, NSUrlConnection에 대한 동기 호출을 그 연결에 대한 어떤 종류의 타임 아웃과 함께 만들어서 스레드가 영원히 멈추지 않을 것이라고 생각했다. 예를 들어 Java/Android에서는 Thread를 서브 클래스 화하고 start() 메소드를 대체하고 동기 HTTP GET 메소드 (Apache의 HttpClient 클래스)를 호출한다. 이것은 매우 쉽고 잘 작동합니다. 그러나 내가 여기에서 보았던 것과 다른 곳에서, 분명히 iOS에서 이것은 훨씬 더 복잡하며, 나는 최선의 접근 방식이 실제로 작동한다는 것에 대해 다소 혼란 스럽다.
그래서 NSThread를 하위 클래스로 만들고 NSUrlConnection을 사용해야합니까? 그것은 비동기 NSUrlConnection NSThread 내부에서 작동하지 않습니다 대리인 메서드를 호출하지 않기 때문에하지만 동기식 메서드는 어떨까요? 어떻게 든 RunLoop을 사용하고 구성하고 자동 풀 풀을 설정해야합니까? 아니면 NSOperation을 사용해야합니까? 내가하는 일은 꽤 흔한 일 인 것 같다. 아무도 제대로 할 방법에 대한 실례를 가지고 있는가?