關於run loop的幾點說明

2021-07-11 04:15:53 字數 1063 閱讀 2995

1.3.1 cocoa中的nsrunloop類並不是執行緒安全的

我們不能再乙個執行緒中去操作另外乙個執行緒的run loop物件,那很可能會造成意想不到的後果。不過幸運的是corefundation中的不透明類cfrunloopref是執行緒安全的,而且兩種型別的run loop完全可以混合使用。cocoa中的nsrunloop類可以通過例項方法:

- (cfrunloopref)getcfrunloop;

獲取對應的cfrunloopref類,來達到執行緒安全的目的。

1.3.2 run loop的管理並不完全是自動的。

我們仍必須設計執行緒**以在適當的時候啟動run loop並正確響應輸入事件,當然前提是執行緒中需要用到run loop。而且,我們還需要使用while/for語句來驅動run loop能夠迴圈執行,下面的**就成功驅動了乙個run loop:

bool isrunning = no;

do  while (isrunning);

1.3.3 run loop同時也負責autorelease pool的建立和釋放

在使用手動的記憶體管理方式的專案中,會經常用到很多自動釋放的物件,如果這些物件不能夠被即時釋放掉,會造成記憶體佔用量急劇增大。run loop就為我們做了這樣的工作,每當乙個執行迴圈結束的時候,它都會釋放一次autorelease pool,同時pool中的所有自動釋放型別變數都會被釋放掉。

1.3.4 run loop的優點

乙個run loop就是乙個事件處理迴圈,用來不停的監聽和處理輸入事件並將其分配到對應的目標上進行處理。如果僅僅是想實現這個功能,你可能會想乙個簡單的while迴圈不就可以實現了嗎,用得著費老大勁來做個那麼複雜的機制?顯然,蘋果的架構設計師不是吃乾飯的,你想到的他們早就想過了。

首先,nsrunloop是一種更加高明的訊息處理模式,他就高明在對訊息處理過程進行了更好的抽象和封裝,這樣你不用處理一些很瑣碎很低層次的具體訊息的處理,在nsrunloop中每乙個訊息就被打包在input source或者是timer source(見後文)中了。

其次,也是很重要的一點,使用run loop可以使你的執行緒在有工作的時候工作,沒有工作的時候休眠,這可以大大節省系統資源。

關於 引用 的幾點說明

一 引用的基本知識 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法 型別識別符號 引用名 目標變數名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數...

關於 引用 的幾點說明

一 引用的基本知識 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法 型別識別符號 引用名 目標變數名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數...

關於iBATIS的sqlmap的幾點說明

1.對於資料庫設計date型別,如果我們要要求返回帶時間的格式時間 yyyy mm dd hh mm ss 那麼我們的 中 jdbctype 必須為 datetime 否則將返回 yyyy mm dd 格式 2.對於輸入引數 我們可以指定 nullvalue 當資料庫沒有值時,可以使用的預設值,但是...