功能簡介
如上圖所示翰守,我們在編寫程序的時候會有各種各樣的流操作孵奶。我們可以將文件讀寫,socket讀寫蜡峰,NSData讀寫了袁,統(tǒng)一使用stream提供的接口來進行操作,諸如open湿颅,close载绿,read,write油航。使用stream提供的狀態(tài)統(tǒng)一進行管理崭庸。也就是說,這個stream相比其他提供類似功能的NSFile或者URLSession,提供更加抽象的操作怕享。和其他的類相比执赡,這個類往往操作的目標就是NSData,也就是二進制流函筋。統(tǒng)一通過Delegate來進行狀態(tài)上報以及數(shù)據(jù)處理沙合。
使用優(yōu)勢
相對于同樣功能的API,比如NSFileManager跌帐,Stream相關的操作往往和Runloop結合的更加緊密首懈。一個Stream所做的相關操作可以分配到某個線程的Runloop的某個mode中;當然谨敛,也可以在某個線程中使用忙等的方式進行操作究履。相對于后者來講,前者對CPU的資源利用更加合理佣盒,因為可以在沒有流數(shù)據(jù)的時候及時讓出CPU資源挎袜。
使用方法
在初始化一個stream對象的時候,開發(fā)者可以通過設置delegate委托對象來實時監(jiān)聽stream的相關狀態(tài)肥惭。然后在對應的狀態(tài)機回調中處理各種狀態(tài)。
工程應用
因此在上傳文件和下載文件的時候紊搪,使用stream配合Runloop就是一種非常好的解決方案蜜葱。因為網(wǎng)絡條件十分復雜,我們無法判斷一個大型文件進行下載的時候是否是連續(xù)一直都有數(shù)據(jù)的耀石,那么如果在runloop中進行相關的操作牵囤,就會在沒有數(shù)據(jù)的時候執(zhí)行線程退出調度序列的操作,讓出CPU資源滞伟,而在有數(shù)據(jù)的時候揭鳞,恢復線程操作,非常節(jié)省資源梆奈。