// 創建NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:nil]; // 啟動[thread start];
[NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(download:) withObject:nil];
+ (NSThread *)currentThread;
+ (NSThread *)mainThread;
+ (void)sleepUntilDate:(NSDate *)date;+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
- (void)setName:(NSString *)n;- (NSString *)name;
@synchronized(self) {// 被鎖住的代碼}
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue_name", NULL);
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 執行耗時的異步操作... dispatch_async(dispatch_get_main_queue(), ^{// 回到主線程,執行UI刷新操作});});
[self performSelector:@selector(download:) withObject:@"http://xxx.jpg" afterDelay:3];
// 任務放到哪個隊列中執行dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);double delay = 3; // 延遲多少秒dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), queue, ^{// 3秒后需要執行的任務});
static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{// 這里面的代碼,在程序運行過程中,永遠只會執行1次});
@interface HMDataTool : NSObject+ (instancetype)sharedDataTool;@end @implementation HMDataTool// 用來保存唯一的單例對象static id _instace; + (id)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instace = [super allocWithZone:zone];});return _instace;} + (instancetype)sharedDataTool{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instace = [[self alloc] init];});return _instace;} - (id)copyWithZone:(NSZone *)zone{return _instace;}@end
@interface HMDataTool : NSObject+ (instancetype)sharedDataTool;@end @implementation HMDataTool// 用來保存唯一的單例對象static id _instace; + (id)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instace = [super allocWithZone:zone];});return _instace;} + (instancetype)sharedDataTool{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instace = [[self alloc] init];});return _instace;} - (id)copyWithZone:(NSZone *)zone{return _instace;} - (oneway void)release { } - (id)retain {return self;} - (NSUInteger)retainCount {return 1;} - (id)autorelease {return self;}@end
[NSOperationQueue mainQueue];
* 添加到"主隊列"中的操作,都會放到主線程中執行
[[NSOperationQueue alloc] init]
* 添加到"非主隊列"中的操作,都會放到子線程中執行
- (void)addOperation:(NSOperation *)op;- (void)addOperationWithBlock:(void (^)(void))block;
- (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
- (void)cancelAllOperations;
[queue setSuspended:YES];
[queue setSuspended:NO];
[operationB addDependency:operationA];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];[queue addOperationWithBlock:^{}];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ }]; }];
1 [self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];
dispatch_async(dispatch_get_main_queue(), ^{ });
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ }];
額外需注意在使用GCD同步的時候不要和主隊列一起使用,否則會出現問題,例如下圖這樣的用法是錯誤的
新聞熱點
疑難解答