深入理解runloop
ios程式啟動與運轉
詳細內容上面的鏈結已經講得很詳細了
下面是關於runloop運用場景
滑動與重新整理;
當tableview的cell上有需要從網路獲取的的時候,滾動tableview,非同步執行緒會去載入,載入完成後主執行緒就會設定cell的,但是會造成卡頓。可以讓設定的任務在cfrunloopdefaultmode下進行,當滾動tableview的時候,runloop是在 uitrackingrunloopmode 下進行,不去設定,而是當停止的時候,再去設定。
這兩者本質是一樣的,第二種其實是在內部建立乙個timer去執行
#pragma mark - nstimer運用
nstimer *time = [nstimer timerwithtimeinterval:20.0 target:self selector:@selector(timeraction) userinfo:nil repeats:yes];
[[nsrunloop mainrunloop] addtimer:time formode:nsdefaultrunloopmode];
#pragma mark - performselector方法
[self performselector:@selector(***:) withobject:self afterdelay:1.0f inmodes:@[nsdefaultrunloopmode]];
常駐子執行緒,保持子執行緒一直處理事件
為了保證執行緒長期運轉,可以在子執行緒中加入runloop,並且給runloop設定item,防止runloop自動退出。這裡為子執行緒設定了runloop之後,由於mode存在,子執行緒就一直做do-while迴圈,而且mode只能新增不能刪除,如果想刪除,只有退出runloop重新設定乙個mode
+ (void)networkrequestthreadentrypoint:(id)__unused object
}+ (nsthread *)networkrequestthread );
return _networkrequestthread;
}- (void)start else
if ([self isready])
[self
.lock unlock];
}
個人學習模型
形成適合自己的學習模型,提高學習效率和能力。以理解關係代數的除法為例,分析為什麼難以理解抽象概念 1 沒有熟悉和理解元組 笛卡爾積 投影 差 的深刻含義。不熟悉容易產生恐懼和模糊的感覺,這會阻止進一步的學習和理解。2 沒有親手舉乙個例項。沒有親手舉具體的例項,產生的也是模糊不清的感覺,這也會阻止進一...
個人學習歷程
知識技能增長歷程 1.hive基本語句學習,建立hive表,把資料從postgresql匯入hive中。2.sqoop 資料匯入工具的學習,使用。先建立hive 表,然後用sqoop把資料匯入。3.neo4j資料庫的學習。把資料匯入到neo4j資料庫。使用python實現。cython 語句的學習。...
ES個人學習
重點內容 es基礎教程 es初學了解 es初學必看 讀完這兩篇文章,大概會對es有個簡單的理解。主要明確索引 類 文件等定義以及他們之間的關係。另外,還要對相關的操作語句進行理解,不用背,其實和資料庫的sql語句的邏輯差不多。es學習社群 國內 國外 kibana簡介 kibana是乙個開源的分析與...