nsthread 예제

취소 메시지에 응답하는 한 가지 방법은 실행 루프 입력 소스를 사용하여 이러한 메시지를 받는 것입니다. 나열 2-3은 이 코드가 스레드의 기본 입력 루틴에서 어떻게 보일지 에 대한 구조를 보여 줍니다. (이 예제에서는 기본 루프 부분만 표시되며 자동 릴리스 풀을 설정하거나 수행할 실제 작업을 구성하는 단계를 포함하지 않습니다.) 이 예제는 다른 스레드에서 메시지를 받을 수 있는 실행 루프에 사용자 지정 입력 소스를 설치합니다. 입력 소스 설정에 대한 자세한 내용은 루프 소스 구성을 참조하십시오. 총 작업량의 일부를 수행한 후 스레드는 실행 루프를 간략하게 실행하여 메시지가 입력 소스에 도착했는지 확인합니다. 그렇지 않으면 실행 루프가 즉시 종료되고 루프는 다음 작업 청크로 계속됩니다. 처리기가 exitNow 로컬 변수에 직접 액세스할 수 없기 때문에 종료 조건은 스레드 사전의 키 값 쌍을 통해 전달됩니다. 먼저 스레드 (예 : tcp 서버)가 될 메서드를 작성해야합니다 장기 실행 프로세스가 주 스레드에서 실행될 때 발생하는 일의 예로 시작한 다음 프로세스를 실행의 새 스레드로 이동하여 차이점을 기록합니다. Xcode를 시작하고 SimpleThread라는 이름의 새로운 단일 보기 아이폰 응용 프로그램을 만듭니다. 단일 단추와 레이블로 구성된 이 간단한 사용자 인터페이스 만들기: 이 메서드를 호출하는 효과는 현재 개체, 선택기 및 매개 변수 개체가 있는 NSThread 메서드를 detachNewThreadSelector:toTarget:withObject라고 부르는 것과 동일합니다.

매개 변수로 사용됩니다. 새 스레드는 기본 구성을 사용하여 즉시 생성되고 실행이 시작됩니다. 선택기 내에서는 스레드와 마찬가지로 스레드를 구성해야 합니다. 예를 들어 가비지 수집을 사용하지 않는 경우 자동 릴리스 풀을 설정하고 스레드의 실행 루프를 사용하도록 계획한 경우 스레드의 실행 루프를 구성해야 합니다. 새 스레드를 구성하는 방법에 대한 자세한 내용은 스레드 특성 구성을 참조하세요. 최상위 자동 릴리스 풀은 스레드가 종료될 때까지 해당 개체를 해제하지 않으므로 수명이 긴 스레드는 개체를 더 자주 해제하는 추가 자동 릴리스 풀을 만들어야 합니다. 예를 들어 실행 루프를 사용하는 스레드는 해당 실행 루프를 통해 매번 자동 릴리스 풀을 만들고 릴리스할 수 있습니다. 개체를 더 자주 해제하면 응용 프로그램의 메모리 공간이 너무 커지는 것을 방지하여 성능 문제가 발생할 수 있습니다.

그러나 성능 과 관련된 동작과 마찬가지로 코드의 실제 성능을 측정하고 자동 릴리스 풀 사용을 적절하게 조정해야 합니다. detachNewThreadSelector:toTarget:withObject: 메서드는 OS X의 모든 버전에서 지원되기 때문에 스레드를 사용하는 기존 Cocoa 응용 프로그램에서 종종 발견됩니다. 새 스레드를 분리하려면 스레드의 진입점으로 사용할 메서드(선택기로 지정)의 이름, 해당 메서드를 정의하는 개체 및 시작 시 스레드에 전달할 데이터를 제공하기만 하면 됩니다. 다음 예제에서는 현재 개체의 사용자 지정 메서드를 사용 하 여 스레드를 생성 하는이 메서드의 기본 호출을 보여 주었습니다. 이 장에서는 OS X 및 iOS에서 사용할 수 있는 스레드 기술에 대한 개요와 응용 프로그램에서 이러한 기술을 사용하는 방법에 대한 예제를 제공합니다. 이러한 코드가 프로덕션 앱에서 발생할 가능성은 거의 없지만 longloop는 앱이 웹에서 정보를 찾는 등 장기 실행 중인 프로세스를 실행하는 경우 발생할 수 있는 예에 대한 순진한 예입니다. 사용자 인터페이스를 차단하는 것은 항상 나쁜 생각입니다 : 그것은 응용 프로그램과 개발자에 대한 사용자 좌절과 나쁜 감정에 이르게.