iOS 코드를 마스터 스레드로 동기화하는 3가지 방법
APP , , , UI, 。 :
@interface NSObject (NSThreadPerformAdditions)
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray *)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
// equivalent to the first method with kCFRunLoopCommonModes
적용:
- (void)updateUIWith:(UIColor *)color{
[self.bottomView setBackgroundColor:color];
}
[self performSelectorOnMainThread:@selector(updateUIWith:) withObject:[UIColor purpleColor] waitUntilDone:YES modes:[NSArray arrayWithObject:(__bridge NSString*)kCFRunLoopCommonModes]];
매개변수 설명:
CF_EXPORT const CFStringRef kCFRunLoopDefaultMode;
CF_EXPORT const CFStringRef kCFRunLoopCommonModes;
따라서 사용 시 교접 방법으로 전환해야 한다.modes 매개 변수는 선택할 수 있습니다. 이 매개 변수를 사용하지 않으면 문서에 있는 아래의 방법을 직접 사용할 수 있고 문서에서 설명을 드렸습니다. 이때 modes는 kCFRunLoopCommonModes의 방식입니다.
+ (NSOperationQueue *)mainQueue NS_AVAILABLE(10_6, 4_0);
호출할 방법을 메인 라인에 직접 추가하면 됩니다. NSOperationQueue로 봉인된 대상 방법
- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);
응용 프로그램
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self.bottomView setBackgroundColor:[UIColor redColor]];
}];
/*!
* @function dispatch_get_main_queue
*
* @abstract
* Returns the default queue that is bound to the main thread.
*
* @discussion
* In order to invoke blocks submitted to the main queue, the application must
* call dispatch_main(), NSApplicationMain(), or use a CFRunLoop on the main
* thread.
*
* @result
* Returns the main queue. This queue is created automatically on behalf of
* the main thread before main() is called.
*/
DISPATCH_INLINE DISPATCH_ALWAYS_INLINE DISPATCH_CONST DISPATCH_NOTHROW
dispatch_queue_t
dispatch_get_main_queue(void)
{
return DISPATCH_GLOBAL_OBJECT(dispatch_queue_t, _dispatch_main_q);
}
호출된 방법을 메인 라인에 연결하고 여기에 Block 방법을 사용합니다. 물론 시스템 봉인 방법입니다. 실현 코드는 다음과 같습니다.
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUIWith:[UIColor greenColor]];
});
결어
, 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.