android 基礎知識四

2021-06-17 00:41:52 字數 2208 閱讀 1334

android中的智慧型指標:強指標和弱指標

android中定義了兩種智慧型指標型別,一種是強指標sp(strong pointer),另外一種是弱指標(weak pointer)。其實稱之為強引用和弱引用更合適一些。強指標與一般意義的智慧型指標概念相同,通過引用計數來記錄有多少使用者在使用乙個物件,如果所有使用者都放棄了對該物件的引用,則該物件將被自動銷毀。

弱指標也指向乙個物件,但是弱指標僅僅記錄該物件的位址,不能通過弱指標來訪問該物件,也就是說不能通過弱智真來呼叫物件的成員函式或訪問物件的成員變數。要想訪問弱指標所指向的物件,需首先通過wp類所提供的promote()方法將弱指標公升級為強指標。弱指標所指向的物件是有可能在其它地方被銷毀的,如果物件已經被銷毀,wp的promote()方法將返回空指標,這樣就能避免出現位址訪問錯的情況。

弱指標是怎麼做到這一點的呢?其實說白了一點也不複雜,原因就在於每乙個可以被智慧型指標引用的物件都同時被附加了另外乙個weakref_impl型別的物件,這個物件中負責記錄物件的強指標引用計數和弱指標引用計數。這個物件是智慧型指標的實現內部使用的,智慧型指標的使用者看不到這個物件。弱指標操作的就是這個物件,只有當強引用計數和弱引用計數都為0時,這個物件才會被銷毀。

說了這麼多原理,下面該看看智慧型指標該如何使用了。假設現在有乙個類myclass,如果要使用智慧型指標來引用這個類的物件,那麼這個類需滿足下列兩個前提條件:

1:這個類是基類refbase的子類或間接子類;

2:這個類必須定義虛建構函式,即它的建構函式需要這樣定義:

virtual ~myclass();

滿足了上述條件的類就可以定義為android智慧型指標了,定義方法和普通指標類似。比如普通指標是這樣定義:

myclass* p_obj;

智慧型指標是這樣定義:

spp_obj;

注意不要定義成sp* p_obj。這是初學者很容易犯的錯誤,這樣其實相當於定義了乙個指標的指標。儘管在語法上沒有問題,但是最好不要這樣定義。

定義了乙個智慧型指標的變數,就可以象普通指標那樣使用它,包括賦值、訪問物件成員、作為函式的返回值、作為函式的引數等。比如:

p_obj = new myclass(); // 注意不要寫成 p_obj = new sp

spp_obj2 = p_obj;

p_obj->func();

p_obj = create_obj();

some_func(p_obj);

複製**

注意不要試圖delete乙個智慧型指標,即 delete p_obj。不要擔心物件的銷毀問題,智慧型指標的最大作用就是自動銷毀不再使用的物件。不需要再使用乙個物件後,直接將指標賦值為null即可:

p_obj = null;

上面說的都是強指標,弱指標的定義方法和強指標類似,但是不能通過弱指標來訪問物件的成員。下面是弱指標的示例:

wpwp_obj = new myclass();

p_obj = wp_obj.promote(); // 公升級為強指標。不過這裡要用.而不是->,真是有負其指標之名啊

wp_obj = null;

複製**

android智慧型指標用起來是很方便,在一般情況下最好使用智慧型指標來代替普通指標。但是需要知道乙個智慧型指標其實是乙個物件,而不是乙個真正的指標,因此其執行效率是比不上普通指標的。所以在追求高效率執行的地方最好還是使用普通指標為好。

android讀取txt檔案亂碼問題

很多

android開發

者在讀取含有雙位元組字元的txt檔案的時候,可能會中文亂碼問題,解決辦法如下:

private string gettextstring(string pathandname) throws ioexception

複製**

下面附帶乙個檢測txt檔案中是否含有雙位元組字元的方法,主要功能:檢測txt檔案中是否含有雙位元組字元,若有返回假,否則返回真。

public static boolean isrightfultxt(file f)       

} fis.close();

isr.close();

br.close();   

} catch (filenotfoundexception e)

catch (unsupportedencodingexception e)

catch (ioexception e)

return true; }

Android基礎知識複習(四)

google android training github託管 中文閱讀位址 實現縮放展示 跟上一節相比,這裡展示了用非同步來實現bitmap縮放展示。這個就是為了處理併發的問題 listview 所以對於asynctask進行擴充套件 取消 例如,兩個非同步都對同乙個imageview進行了操作...

android基礎知識

1.android paint和color類 要繪圖,首先得調整畫筆,待畫筆調整好之後,再將影象繪製到畫布上,這樣才可以顯示在手機螢幕上。android 中的畫筆是 paint類,paint 中包含了很多方法對其屬性進行設定,主要方法如下 setantialias 設定畫筆的鋸齒效果。setcolo...

Android 基礎知識

我們是 h是對應 2560 1440 xxh是對應 1920 1080 1dp 3px xh是對應 1280 720 1dp 2px h是對應 800 480 m是對應 480 320 bg splash.png error failed to read png signature file doe...