iOS 비동기 스레드가 종료될 때까지 기다렸다가 다음 코드 실행
4474 단어 기술 노트
#import "ViewController.h"
typedef void(^SuccessBlock)(NSString *Obj);
@interface ViewController ()
@property (nonatomic, weak) SuccessBlock successBlock;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self getADataFromOtherOperationQueue:^(NSString *Obj) {
NSLog(@"%@",Obj);
}];
NSLog(@"22222222222222222");
}
- (void)getADataFromOtherOperationQueue:(SuccessBlock)successBlock
{
self.successBlock = successBlock;
[self performSelector:@selector(setADataToOtherOperationQueue) withObject:nil afterDelay:5.0];
}
- (void)setADataToOtherOperationQueue
{
self.successBlock(@"11111111111111111");
}
인쇄 결과는 항상 아래의 이런 것을 피하기 어렵다. 설령 내가 자물쇠를 채웠다 하더라도 안 된다.
22222222222222222
11111111111111111
나중에 검색을 해보니 좋은 방법이 하나 있었어요.
#import "ViewController.h"
typedef void(^SuccessBlock)(NSString *Obj);
@interface ViewController ()
@property (nonatomic, weak) SuccessBlock successBlock;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self getADataFromOtherOperationQueue:^(NSString *Obj) {
// RunLoop
CFRunLoopStop(CFRunLoopGetMain());
NSLog(@"%@",Obj);
}];
// RunLoop
CFRunLoopRun();
NSLog(@"22222222222222222");
}
- (void)getADataFromOtherOperationQueue:(SuccessBlock)successBlock
{
self.successBlock = successBlock;
[self performSelector:@selector(setADataToOtherOperationQueue) withObject:nil afterDelay:5.0];
}
- (void)setADataToOtherOperationQueue
{
self.successBlock(@"11111111111111111");
}
인쇄 결과:
11111111111111111
22222222222222222
나의 문제는 순식간에 해결되었다,very good!!!
또한 감사합니다, 대신의 공유 원문 링크: iOS 비동기 요청 대기 전송 방법 요약