RunLoop이 뭐예요?
Event Loop 모델
만약 우리가 스레드가 수시로 사건을 처리할 수 있지만 종료되지 않도록 하는 메커니즘이 필요하다면 일반적인 코드 논리는 다음과 같다.function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}
이것이 바로 많은 시스템과 프레임워크에서 실현된 이벤트 Loop 모델, 예를 들어Node.js의 이벤트 처리, Windows 프로그램의 메시지 순환, 그리고 우리 OSX/iOS의 RunLoop, Event Loop 모델이 실현하는 관건은 이벤트/메시지를 어떻게 관리하는가, 정보를 처리하지 않을 때 라인을 휴면시켜 자원 점용을 피하는가이다.소식이 왔을 때 깨어났다.
따라서 RunLoop은 사실상 하나의 대상이다. 이 대상은 처리해야 할 이벤트와 메시지를 관리하고 입구 함수를 제공하여 위의 Event Loop의 논리를 집행한다.루틴이 이 함수를 실행하면 이 함수 내부의'메시지 받아들이기-->기다림-->처리'의 순환에서 이 순환이 끝난 것을 알고(예를 들어quit 메시지를 전송하는 것), 함수가 되돌아옵니다.
프로그램이 시작된 Run Loop
새 xcode 프로덕션 프로젝트에는 다음과 같은 코드 블록이 있습니다.int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class]));
}
}
프로그램이 시작되면 위 코드가 호출되고 메인 라인도 실행되며 RunLoop도 실행됩니다.UIApplicationMain () 방법에서 프로그램 초기화를 완성하고 프로그램의Delegate 작업을 설정하며 메인 라인의 RunLoop을 열면 이벤트 처리를 받기 시작합니다.
RunLoop은 루틴의 입력을 받아들여 이벤트 처리 함수를 통해 이벤트를 처리하는 순환입니다.runloop을 구동하기 위해while or for 순환을 코드에 제공해야 합니다.순환에서runloop 대상으로 이벤트 처리와 관련된 내용을 구동하고 이벤트를 받아들이며 응답 처리를 합니다.
RunLoop은 루틴의 순환이며 받아들인 이벤트를 처리합니다.저희 코드는while 또는 for 순환을 제공하여RunLoop을 구동할 수 있습니다.루프 객체는 반복 중에 이벤트 처리 코드를 담당합니다(이벤트를 수락하고 적절한 이벤트 처리 방법을 호출).
RunLoop 프레임 객체 API
OSX/iOS 시스템에는 NSRunLoop과 CFRunLoopRef라는 두 개의 객체가 제공됩니다.CFRunLoopRef는CoreFoundation 프레임워크 내에 있으며 순수 C 함수의 API를 제공합니다. 모든 API는 라인이 안전합니다.NSRunLoop은 CFRunLoopRef의 봉인을 바탕으로 대상을 대상으로 하는 API를 제공하지만 이러한 API는 라인이 안전하지 않다.
CFRunLoopRef의 코드는 원본입니다. 당신은 여기에 있을 수 있습니다http://opensource.apple.com/tarballs/CF/전체 CoreFoundation의 소스를 다운로드하여 보십시오.
Swift가 오픈된 후 애플은 플랫폼을 뛰어넘는CoreFoundation 버전을 유지했다.https://github.com/apple/swift-corelibs-foundation/, 이 버전의 원본 코드는 기존 iOS 시스템의 구현과 약간 다르지만, 컴파일하기 쉽고, Linux/Windows와 잘 어울린다.
Cocoa는 RunLoops와 관련됨
시스템 수준: GCD, mach kernel, block, pthread 애플리케이션 수준: NSTimer, UIEvent, Autorelease, NSObject(NSDelayedPerforming), NSObject(NSThreadPerformAddition), CATransition, dispatchget_main_queue () (GCD에서 dispatch에서mainqueue까지의 Block은 dispatch에서main RunLoop에 실행됨), NSPort, NSURLconnection,AFNetworking (이 제3자 네트워크 요청 프레임워크는 새로운 라인을 열 때 자신의run loop 감청 이벤트를 추가하는 데 사용)
Main thread 스택의 위치
스택 맨 아래쪽은 start(dyld), 위쪽은main, UIAPplication(main.m)-> GSEventRunModal(Graphic Services)-> RunLoopRunSpecific, CFRunLoopRun, CFRunLoopDoSouces0, CFRUNLOOP IS CALING OUT TO A SOURCE0 PERFORM FUCTION - Handle TION Touch Tovent
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}
새 xcode 프로덕션 프로젝트에는 다음과 같은 코드 블록이 있습니다.
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class]));
}
}
프로그램이 시작되면 위 코드가 호출되고 메인 라인도 실행되며 RunLoop도 실행됩니다.UIApplicationMain () 방법에서 프로그램 초기화를 완성하고 프로그램의Delegate 작업을 설정하며 메인 라인의 RunLoop을 열면 이벤트 처리를 받기 시작합니다.
RunLoop은 루틴의 입력을 받아들여 이벤트 처리 함수를 통해 이벤트를 처리하는 순환입니다.runloop을 구동하기 위해while or for 순환을 코드에 제공해야 합니다.순환에서runloop 대상으로 이벤트 처리와 관련된 내용을 구동하고 이벤트를 받아들이며 응답 처리를 합니다.
RunLoop은 루틴의 순환이며 받아들인 이벤트를 처리합니다.저희 코드는while 또는 for 순환을 제공하여RunLoop을 구동할 수 있습니다.루프 객체는 반복 중에 이벤트 처리 코드를 담당합니다(이벤트를 수락하고 적절한 이벤트 처리 방법을 호출).
RunLoop 프레임 객체 API
OSX/iOS 시스템에는 NSRunLoop과 CFRunLoopRef라는 두 개의 객체가 제공됩니다.CFRunLoopRef는CoreFoundation 프레임워크 내에 있으며 순수 C 함수의 API를 제공합니다. 모든 API는 라인이 안전합니다.NSRunLoop은 CFRunLoopRef의 봉인을 바탕으로 대상을 대상으로 하는 API를 제공하지만 이러한 API는 라인이 안전하지 않다.
CFRunLoopRef의 코드는 원본입니다. 당신은 여기에 있을 수 있습니다http://opensource.apple.com/tarballs/CF/전체 CoreFoundation의 소스를 다운로드하여 보십시오.
Swift가 오픈된 후 애플은 플랫폼을 뛰어넘는CoreFoundation 버전을 유지했다.https://github.com/apple/swift-corelibs-foundation/, 이 버전의 원본 코드는 기존 iOS 시스템의 구현과 약간 다르지만, 컴파일하기 쉽고, Linux/Windows와 잘 어울린다.
Cocoa는 RunLoops와 관련됨
시스템 수준: GCD, mach kernel, block, pthread 애플리케이션 수준: NSTimer, UIEvent, Autorelease, NSObject(NSDelayedPerforming), NSObject(NSThreadPerformAddition), CATransition, dispatchget_main_queue () (GCD에서 dispatch에서mainqueue까지의 Block은 dispatch에서main RunLoop에 실행됨), NSPort, NSURLconnection,AFNetworking (이 제3자 네트워크 요청 프레임워크는 새로운 라인을 열 때 자신의run loop 감청 이벤트를 추가하는 데 사용)
Main thread 스택의 위치
스택 맨 아래쪽은 start(dyld), 위쪽은main, UIAPplication(main.m)-> GSEventRunModal(Graphic Services)-> RunLoopRunSpecific, CFRunLoopRun, CFRunLoopDoSouces0, CFRUNLOOP IS CALING OUT TO A SOURCE0 PERFORM FUCTION - Handle TION Touch Tovent
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
시스템 수준: GCD, mach kernel, block, pthread 애플리케이션 수준: NSTimer, UIEvent, Autorelease, NSObject(NSDelayedPerforming), NSObject(NSThreadPerformAddition), CATransition, dispatchget_main_queue () (GCD에서 dispatch에서mainqueue까지의 Block은 dispatch에서main RunLoop에 실행됨), NSPort, NSURLconnection,AFNetworking (이 제3자 네트워크 요청 프레임워크는 새로운 라인을 열 때 자신의run loop 감청 이벤트를 추가하는 데 사용)
Main thread 스택의 위치
스택 맨 아래쪽은 start(dyld), 위쪽은main, UIAPplication(main.m)-> GSEventRunModal(Graphic Services)-> RunLoopRunSpecific, CFRunLoopRun, CFRunLoopDoSouces0, CFRUNLOOP IS CALING OUT TO A SOURCE0 PERFORM FUCTION - Handle TION Touch Tovent
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.