教程詳細:
技術:objective-c
難度:初學者
歡迎來到學習objective-c系列教程的第三部分,我希望大家能夠喜歡這個系列教程!上週,我們接觸了如何把類劃分到檔案裡(介面和實現),這週呢,我們將繼續研究類,但會有一點點深喲。同樣,在變數的範疇裡,我們也會提及繼承及其工作原理。
回顧:類&物件
類,就是封裝過的資料和自定義方法的集合。乙個類可能容納許多不同各類的資料,類方法通常和這些資料有關聯。在objective-c之中,乙個類通常由兩個檔案組成,乙個介面檔案和乙個實現檔案。這介面檔案使用.h作字尾名,當我們使用這類時可以很快的找到方法和資料成員。這實現檔案用.m作字尾名,它包含了大部分的**,因為它包含了所有在介面檔案中宣告的方法的實現。
那麼,怎麼區分類與物件呢?什麼是物件? 物件就是乙個類的例項。回顧我們上一部分的汽車例子。這裡的car是類,然而mycar,danscar和youcar就是物件了,因為它們都這個car類的例項。
來自蘋果的類(還有一些故事)
在我們繼續之前呢,我想分享一些蘋果公司提供的通用類,但在開始之前,先來一小節歷史課吧。
許多蘋果公司提供的類是以「ns」打頭的,這是nextstep的風格了。當年喬幫主離開了蘋果,他就建立了next,隨後建立執行之上的電腦工作站。執行在這些機器上的物件導向語言就被稱為「nextstep「,」ns「就出自於此拉。當蘋果收購了nextstep(另一堂歷史課了),他們就決定把mac os x建立在nextstep之上。
這裡有幾個例子,我們將會常見的通用類:
隨後,我們將學習更多,但以上的將會派上用場了。你也許會想知道什麼是「可變」,什麼是「不可變」,這確實是容易理解的問題。如果乙個物件是不可變的,這意味著當我們建立乙個物件並給它賦值時,它是靜態的,這些值就不能改變了。如果物件是可變的,那它就是動態的,被建立後它的值仍可以改變。
指標和初始化
例如,我們想建立一靜態字串並且記錄它,這我該如何做呢?這**看起來會像這樣的:
1. #import <foundation/foundation.h
>
2.
3. int main (int argc, const char * argv)這裡有比較多的新東西,所以,就讓我們逐一學習吧。
首先,我們匯入了基礎類庫(因為我們在新專案中對foundation設定了型別)。
1. int main (int argc, const char * argv) {當我們的程式開始執行時,這個宣告初始化函式將被呼叫。這兩個以逗號隔開的引數是用來傳遞給我們應用程式的。現在,不要關心這些,因為我們還沒用到。
1. nsstring *teststring; teststring = [[nsstring alloc] init];現在我們建立乙個叫teststring並指向nsstring物件的指標。一旦第一行結束,字串不存在的,這僅僅有乙個指向字串的指標。然後在下一行,我們將會建立指標指向的字串。
我們可以把最後一行改變為:
1. teststring = [nsstring alloc];
2. [teststring init];看起來有點令人發暈,第乙個版本,我們在同一行把語句巢狀在方括號內,第二個版本,我們把這兩條語句分到兩行。這方法初始化了所有類裡的所有例項變數。
1. teststring = @"here's a test string in teststring!";看到這行,應該很明白了,為什麼我們要引號前加乙個 @ 呢,這是為了告訴編譯器, 這是乙個nsstring。
nslog(@」teststring: %@」, teststring);
在這裡,我們將會向控制台輸出一些資訊。xcode裡有一偵錯程式,你可以在執行選單下找到。這非常有用,當開發一應用程式的事件觸發還有某些變數的值改變時,它可以給予排除故障和除錯問題的幫助。這些方法的工作像printf(還記得上面提到過嗎),就是提供乙個替換字元的文字字串(%@表示乙個objective-c物件)。
最後我們返回0, 這是我們告訴作業系統這程式沒有出錯。 繼承
還記得建立我們的nsstring之前是做了什麼,使用初始化方法?嗯~,事實上nsmutablestring,nsarray,每乙個ns 類,也會使用初始化。似乎是浪費了許多**放在每個類的初始化方法裡,對不對?也許是吧,這是為什麼初始化通常只在根類nsobject裡實現一次。由於許多類互相繼承,乙個為被建立並成為另乙個的孩子,你類將自動獲得訪問你類的方法。
以 nsmutablestring 為例, nsmutablestring 認 nsstring 作父, 這表示它繼承於 nsstring。然而,nsstring認nsobject作父,這說明它繼承於nsobject。
例如,nsobject有一叫init的方法,所以它的每個子類都擁有這方法的實現——這就是被叫做類方法。事實上,nsobject中的init不會做太多事情,只是返回自己。原因就是這方法是可以被重寫的。所以,nsarray類可以重寫繼承的init方法,如確保記憶體是可用的或是準備一些需要的例項變數。
實事證明這是有用的,因為我們除了從父類繼承,還可以作擴充套件。當我們擴充套件乙個類,我們需要乙個現成類並向其新增額外的功能。這就意味著,你可以通過新增額外方法去建立你自己的nsstring版本,例如,增加乙個隨機填充一字串或執行一些字元的排序的方法。 小結
講到這裡,類工作的基本原理算是講清楚了。好了,來測試一下自己的理解程式吧,看看是否能回答以下問題?
既然類是objective-c的乙個重要組成部分,使用類是比較方便的。上週我們已經接觸過類,這週也深入的**了。下週呢,可能你聽到都會興奮,我們要純粹的理論,開始使用一些簡單類,或是做一些小任務。 作業
目前為止,主要還是講理論,這週的任務主要是瀏覽蘋果開發者**,同時學習一些現成的類。如果你不知道從何開始,那就從nsstring開始吧。你將會為你類的細節(如方法等等)感到便捷的。這些將對你接下來學習有幫助,特別是當你使用類並且想知道什麼方法是繼承的。
學習第三天
額,又是美好的一天!祝賀比利時奪得季軍!下面,還是先看資訊學 今天繼續看倍增。這道題是和倍增沾邊的題,額,其實就是兩邊floyd。但是思路還是可以借鑑的。這道的思路是,使用兩個陣列,乙個是f k u v 這個陣列表示節點u到節點v之間是否距離為2 k,如果是,則為1,否則為0.代表u和v之間是否1s...
學習第三天
等價類是建立在這種思想之上 即我們不可能進行窮舉測試,那麼我們就 必須對輸入進行分類,而這種分類是建立在我們知道計算機程式設計原理和 計算機處理單元的工作原理基礎之上的,程式是通過資料結構和演算法來實現 的,計算機是按照演算法來執行程式的,這種執行是穩定的,不會因為我們的 輸入而導致計算機處理不穩定...
學習第三天
ctrl c 複製 ctrl v 貼上 ctrl a 全選 ctrl x 剪下 ctrl z 撤銷 ctrl s 儲存 alt f4 關閉視窗 shift delete 永久刪除 windows r 執行 windows e 我的電腦 ctrl shift esc 任務管理器 開始 系統 命令提示符...