【iOS開發】多執行緒 - 概述
- 執行緒
- 主執行緒
- 後臺執行緒
-
執行緒是被模擬出來的,CPU通過分配時間片的方法模擬出多執行緒
-
NSThread建立一個執行緒
- 物件方法
// 物件方法 NSThread *thread1 = [[NSThread alloc] initWithBlock:^{ ... }]; [thread1 start];
- 類方法
// 類方法 [NSThread detachNewThreadWithBlock:^{ ... }];
- 繼承物件
@interface testThread : NSThread @end @implementation testThread - (void)main { ... } @end
// 繼承方法 testThread *thread_t = [[testThread alloc] init]; thread_t.delegate = self; [thread_t start];
-
執行緒的狀態
優雅的取消一個執行緒
// way1,該執行緒立刻退出,若果該執行緒退出前執行緒中申請的資源沒有釋放容易造成記憶體洩漏
+ (void)exit
// way2,不作特殊處理該執行緒會繼續執行
- (void)cancel
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
_thread1 = [[NSThread alloc] initWithBlock:^{
NSLog(@"thread start");
for (NSInteger i = 0; i <= 100; i ++) {
NSLog(@"%@ --- %ld", _thread1, (long)i);
sleep(1);
if ([[NSThread currentThread] isCancelled]) {
break;
}
}
NSLog(@"thread end");
}];
[_thread1 start];
}
#pragma mark - Button methods
- (IBAction)handleCancelThread:(id)sender {
[_thread1 cancel];
_thread1 = nil;
}
- 執行緒相關的方法
+ (BOOL)isMainThread; // 當前的程式碼執行的執行緒是否是主執行緒
+ (NSThread *)currentThread; // 當前程式碼執行的執行緒
+ (NSThread *)mainThread; // 獲取主執行緒
- 暫停執行緒的方法
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
- 執行緒通訊
@interface NSObject (NSThreadPerformAdditions)
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg
@end
-
多執行緒優點
- 提高APP實時響應效能
- 充分利用計算資源
-
多執行緒缺點
- 執行緒安全
- 複雜度提升
- 需要額外的系統開銷
- 執行緒的開銷
-
執行緒同步問題
-
執行緒同步的方法
- NSLock
@protocol NSLocking // 訪問變數前後使用 - (void)lock; - (void)unlock; @end @interface NSLock : NSObject <NSLocking> { @private void *_priv; } - (BOOL)tryLock; - (BOOL)lockBeforeDate:(NSDate *)limit; @property (nullable, copy) NSString *name API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); @end
- synchronized
@synchronized (self) { a ++; }
-
死鎖
相關文章
- iOS多執行緒開發—GCD (一)iOS執行緒GC
- 多執行緒安全-iOS開發注意咯!執行緒iOS
- 多執行緒安全-iOS開發注意咯!!!執行緒iOS
- iOS開發-多執行緒程式設計iOS執行緒程式設計
- 多執行緒的概述執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒整理iOS執行緒
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- Java 多執行緒 - 總結概述Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- iOS 多執行緒總結iOS執行緒
- iOS 多執行緒之GCDiOS執行緒GC
- iOS 多執行緒之NSOperationiOS執行緒
- iOS 多執行緒之NSThreadiOS執行緒thread
- iOS 多執行緒之NSOperationQueueiOS執行緒
- iOS 多執行緒介紹iOS執行緒
- iOS多執行緒GCD篇iOS執行緒GC
- iOS 多執行緒筆記iOS執行緒筆記
- iOS 多執行緒-學習iOS執行緒
- iOS 多執行緒詳解iOS執行緒
- IOS多執行緒之(GCD)iOS執行緒GC
- C#多執行緒開發-執行緒同步 02C#執行緒
- C#多執行緒開發-執行緒池03C#執行緒
- C#多執行緒開發-執行緒基礎 01C#執行緒
- iOS 多執行緒記錄(二)iOS執行緒
- iOS 多執行緒記錄(一)iOS執行緒
- iOS - 多執行緒分析之 DispatchQueue ⅠiOS執行緒
- iOS多執行緒:NSOperation詳解iOS執行緒
- iOS多執行緒:GCD詳解iOS執行緒GC
- 使用委託開啟多執行緒(多執行緒深入)執行緒
- iOS多執行緒詳解:概念篇iOS執行緒
- iOS 多執行緒之NSThread和NSObjectiOS執行緒threadObject
- iOS多執行緒(Pthread、NSThread、GCD、NSOperation)iOS執行緒threadGC
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS
- 多執行緒併發篇——如何停止執行緒執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- 多執行緒和多執行緒同步執行緒