iOS RunLoop常駐執行緒
常駐執行緒的作用:
讓一個一直存在的子執行緒,等待其他執行緒發來訊息,處理其他事件。
1.設定成全域性的,如果是執行緒物件是區域性的就會死掉
@property (strong, nonatomic) NSThread *thread;
2.初始化執行緒並啟動
self.thread = [[NSThread alloc]initWithTarget:self selector:@selector(myRun) object:nil];
[self.thread start];
3.啟動RunLoop,子執行緒的RunLoop預設是停止的
- (void )myRun {
//只要往RunLoop中添加了timer、source或者observer就會繼續執行,一個Run Loop通常必須包含一個輸入源或者定時器來監聽事件,如果一個都沒有,Run Loop啟動後立即退出。
@autoreleasepool {
//1、新增一個input source
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
//2、新增一個定時器
// NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:YES];
// [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
// [[NSRunLoop currentRunLoop] run];
}
[self performSelector:@selector(action) onThread:self .thread withObject:nil waitUntilDone:NO ];
}
這樣thread這個執行緒就會一直存在,當需要使用此執行緒在處理一些事情的時候就這麼呼叫。
4.利用常駐執行緒處理事情
[self performSelector:@selector(action) onThread:self.thread withObject:nil waitUntilDone:NO ];
在action方法中 寫下你需要處理事情的程式碼。
相關推薦
iOS RunLoop常駐執行緒
常駐執行緒的作用: 讓一個一直存在的子執行緒,等待其他執行緒發來訊息,處理其他事件。 1.設定成全域性的,如果是執行緒物件是區域性的就會死掉 @property (strong, nonatomic) NSThread *thread;
iOS 開啟常駐執行緒
iOS上開啟常駐執行緒,有幾個方式,我做了幾個測試。(關於什麼是常駐執行緒,不熟悉的同學自己腦補一下吧) 1 iOS系統支援POSIX執行緒模型,當然就可以使用POSIX那一套執行緒api來開啟常駐執行緒。 void thread_fucn(void* arg) {
iOS探索:RunLoop本質、資料結構以及常駐執行緒實現
RunLoop的本質 RunLoop是通過內部維護的事件迴圈來對事件/訊息進行管理的一個物件 沒有訊息需要處理時,休眠以避免資源佔用,狀態切換是從使用者態通過系統呼叫切換到核心態 有訊息處理時,立刻被喚醒,狀態切換是從核心態通過系統呼叫切換到使用者態 這裡有一個問題,我們應用程式中
iOS開發-使用Runloop實現執行緒保活、執行緒常駐
保證執行緒的長時間存活 在iOS開發過程中,有時一些花費時間比較長的操作阻塞主執行緒,導致介面卡頓,那麼我們就會建立一個子執行緒,然後把這些花費時間比較長的操作放在子執行緒中來處理。可是當子執行緒中的任務執行完畢後,子執行緒就會被銷燬掉。 首先,我們建立一
iOS開發多執行緒-RunLoop
一、什麼是RunLoop 1.從字面意思看 1)執行迴圈 2)跑圈 2.基本作用 1)保持程式的持續執行 2)處理App中的各種事件(比如觸控事件、定時器事件、Selector事件) 3)節省CPU資源,提高程式效能:該做事
IOS在子執行緒中使用定時器,將定時器新增至RunLoop中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)lau
iOS總結-多執行緒篇之NSOperation和NSOperationQueue
參考:https://www.jianshu.com/p/4b1d77054b35 NSOperation/NSOperationQueue是基於GCD更高一層的封裝,完全面向物件。 優點:1.可新增完成的程式碼塊,在操作完成後執行
iOS總結-多執行緒篇之GCD之三
dispatch_barrier_async :GCD柵欄方法 dispatch_apply dispatch_semaphore:GCD訊號量 持有計數的訊號,計數為0時等待,不可通過.計數為1或者大於1時,計數減1且不等待,可通過. dispatch_semap
iOS總結-多執行緒篇之GCD之二
dispatch_group dispatch_wait dispatch_group_enter/dispatch_group_leave dispatch_group_enter標誌一個任務加入group,未執行完畢任務數+1 dispatch_group
iOS總結-多執行緒篇之GCD之一
程序:作業系統資源分配的基本單位 執行緒:任務排程和執行的基本單位 一個程序裡面可以有多個執行緒. GCD自動利用CPU核心(如雙核,四核),會自動管理執行緒的生命週期(建立執行緒,排程任務,銷燬執行緒) 而NSOperation Queue是可以管理執行緒的. 佇列
iOS開發多執行緒詳解
在iOS開發中,多執行緒開發是非常重要的核心之一,這篇文章和大家分享一下多執行緒的進階-死鎖. iOS有三種多執行緒程式設計的技術,分別是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全稱:Grand Central Dispatch) 如果你對多執行緒
iOS開發多執行緒學習總結 - GCD的使用
文章內容和排版參考: iOS 多執行緒: [GCD]詳盡總結 GCD - 核心概念: 任務 | 佇列 任務: 就是指需要執行的程式碼, 在block中編寫,有 同步執行 和 非同步執行 兩種方式.
ios解決多執行緒忘記釋放lock的
為了解決多執行緒忘記釋放lock的問題,引入哨兵ThreadGuard #import<Foundation/Foundation.h> @interface ThreadGuard :NSObject - (instancetype)initWithLock:(N
iOS中保證執行緒安全的幾種方式與效能對比
一、前言 前段時間看了幾個開源專案,發現他們保持執行緒同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。後來網上查了一下,發現他們的實現機制各不相同,效能也各不一
AFNetworking3.0後為什麼不再需要常駐執行緒?
最近在補原始碼閱讀方面的短板,第一個選擇的就是AFNetworking,一方面AF的編碼思路、程式碼質量都屬於開源框架的上乘;另一方面也可以藉機溫習一下網路方面的東西。 AF原始碼解析的系列文章有很多(文末有我看過的一些推薦給大家),本文不對AF作全面的解析,僅從常駐執行緒這個
iOS開發-多執行緒NSThread的基本介紹和使用
今天給同學講解一下多執行緒的入門瞭解和使用那麼廢話不多說直接上程式碼~ NSThread建立和啟動執行緒 NSThread其他用法 其他建立執行緒方式 執行緒的狀態介紹 控制執行緒狀態 多執行緒的安全
iOS GCD 多執行緒非同步實踐
1、GCD執行非同步序列佇列不能保證100%的順序執行; 2、不要頻繁的讀寫磁碟,放到子執行緒裡也會極大的影響效能和耗電; 3、使用SDWebimage為cell.imageView賦值URL的時候不能使用非同步執行緒,因為非同步沒辦法控制SD裡image的返回順序,也涉
iOS開發-多執行緒GCD的介紹和使用
今天給同學講解一下強大的GCD(Grand Central Dispatch) 可譯為"牛逼的中樞排程器"來實現多執行緒的技術那麼廢話不多說直接上程式碼~ 什麼是GCD? 任務和佇列 執行任務 佇列的
iOS-GCD多執行緒
1、GCD基本知識 學習 GCD 之前,先來了解 GCD 中兩個核心概念:任務和佇列。 任務:當前執行的操作,換句話說就是現線上程中執行的那段程式碼,在 GCD 中是放在 block 中的。 任務的執行有兩種方式:同步執行(sync)和非同步執行(async)。兩者的主
iOS開發之執行緒間的MachPort通訊與子執行緒中的Notification轉發
如題,今天的部落格我們就來記錄一下iOS開發中使用MachPort來實現執行緒間的通訊,然後使用該知識點來轉發子執行緒中所發出的Notification。簡單的說,MachPort的工作方式其實是將NSMachPort的物件新增到一個執行緒所對應的RunLoop中,並給NSMachPort物件設定相應的代理。