메인 스레드에 NSNotification 게시
NSNotification
모든 백그라운드 스레드에서 기본 스레드에 게시 할 수있는 다음 코드 조각을 찾았습니다 . 이것이 안전하고 수용 가능한 관행인지 알고 싶습니다. 제발?
dispatch_async(dispatch_get_main_queue(),^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"ImageRetrieved"
object:nil
userInfo:imageDict];
});
네 할 수 있습니다 .
일반적으로 NSNotifications가 main에서 전송되기를 원합니다. 특히 모달 로그인 대화 상자를 닫는 것과 같은 UI 활동을 트리거하는 경우 특히 그렇습니다.
정기 알림 센터는 알림이 게시 된 스레드에 알림을 전달합니다. 분산 알림 센터는 기본 스레드에서 알림을 전달합니다. 때로는 알림 센터 대신 사용자가 결정한 특정 스레드에서 알림을 전달하도록 요구할 수 있습니다. 예를 들어, 백그라운드 스레드에서 실행중인 객체가 창 닫기와 같은 사용자 인터페이스의 알림을 수신하는 경우 기본 스레드 대신 백그라운드 스레드에서 알림을 수신하려고합니다. 이 경우 기본 스레드에서 전달되는 알림을 캡처하고 적절한 스레드로 리디렉션해야합니다.
예
이것은-당신은 메인 스레드에 들어가서 알림을 게시하고 있습니다. 그보다 더 안전 할 수는 없습니다.
예
Swift 2 구문
dispatch_async(dispatch_get_main_queue()) {
NSNotificationCenter.defaultCenter().postNotificationName("updateSpinner", object: nil, userInfo: ["percent":15])
}
Swift 3 구문
DispatchQueue.main.async {
NotificationCenter.default.post(name: "updateSpinner", object: nil, userInfo: ["percent":15])
}
라인을 따라 어딘가에서 이것이 가능해졌습니다.
addObserver(forName:object:queue:using:)
어떤은 여기에 있지만, 요점은입니다 queue
객체입니다.
블록을 추가해야하는 작업 대기열입니다. 을 전달
nil
하면 게시 스레드에서 블록이 동 기적으로 실행됩니다.
그렇다면 메인 런 루프에 해당하는 큐를 어떻게 얻습니까?
let mainQueue = OperationQueue.main
참고 : 이것은 알림을 구독하는 경우이므로 한 번만하면 완료됩니다. 모든 단일 통화에 대해 수행하는 것은 엄청나게 중복됩니다.
참고 URL : https://stackoverflow.com/questions/15813764/posting-nsnotification-on-the-main-thread
'Program Tip' 카테고리의 다른 글
"HTML"페이지의 "HEAD"요소 외부에 CSS 스타일을 선언 하시겠습니까? (0) | 2020.12.12 |
---|---|
Windows에서 node.js를 업그레이드하는 방법은 무엇입니까? (0) | 2020.12.12 |
tslint를 사용하여 전체 폴더를 린트하는 방법 (0) | 2020.12.11 |
Maven은 npm과 유사합니까? (0) | 2020.12.11 |
로컬에서 파일을 삭제 한 후 SVN 커밋 오류 (0) | 2020.12.11 |