【iOS開發】多執行緒 - 概述
- 執行緒
- 主執行緒
- 後臺執行緒
-
執行緒是被模擬出來的,CPU通過分配時間片的方法模擬出多執行緒
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;
}
![752708-9a53bf0ff2817812.jpg](https://upload-images.jianshu.io/upload_images/752708-9a53bf0ff2817812.jpg)
- 執行緒相關的方法
+ (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實時響應效能
- 充分利用計算資源
-
多執行緒缺點
- 執行緒安全
- 複雜度提升
- 需要額外的系統開銷
- 執行緒的開銷
![752708-53784d3cb6eafbfc.jpg](https://upload-images.jianshu.io/upload_images/752708-53784d3cb6eafbfc.jpg)
執行緒開銷
-
執行緒同步問題
-
執行緒同步的方法
- 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開發多執行緒篇-概述iOS執行緒
- IOS多執行緒程式設計:概述iOS執行緒程式設計
- 多執行緒-執行緒概述等執行緒
- 多執行緒概述執行緒
- iOS多執行緒開發—GCD (一)iOS執行緒GC
- iOS 開發中的多執行緒iOS執行緒
- 多執行緒的概述執行緒
- 多執行緒安全-iOS開發注意咯!執行緒iOS
- 多執行緒安全-iOS開發注意咯!!!執行緒iOS
- 多執行緒-程式和執行緒的概述執行緒
- 多執行緒-執行緒組的概述和使用執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- Java多執行緒1:程式與執行緒概述Java執行緒
- IOS多執行緒iOS執行緒
- iOS 多執行緒iOS執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- Java 多執行緒 - 總結概述Java執行緒
- iOS開發基礎——執行緒安全(執行緒鎖)iOS執行緒
- iOS多執行緒整理iOS執行緒
- iOS-多執行緒iOS執行緒
- C#多執行緒開發-執行緒同步 02C#執行緒
- C#多執行緒開發-執行緒池03C#執行緒
- 多執行緒同步的開發執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- C#多執行緒開發-執行緒基礎 01C#執行緒
- iOS 多執行緒總結iOS執行緒
- iOS多執行緒GCD篇iOS執行緒GC
- iOS 多執行緒筆記iOS執行緒筆記
- IOS多執行緒之(GCD)iOS執行緒GC
- iOS 多執行緒之GCDiOS執行緒GC
- iOS 多執行緒介紹iOS執行緒
- iOS 多執行緒-學習iOS執行緒
- iOS多執行緒--NSThreadiOS執行緒thread
- iOS多執行緒的使用iOS執行緒
- iOS 多執行緒詳解iOS執行緒
- iOS 深入剖析多執行緒iOS執行緒
- iOS多執行緒調研iOS執行緒