IOS之Objective-C學習筆記(二)


     今天來記錄一下怎么使用Objective-C來實現面向對象的編程。

1.首先先看看一些新的術語:

   (1)類:是一種結構,它表示對象的類型,對象引用類來獲得和本身有關的各種信息,特別是運行什么代碼來處理每種操作。

   (2)對象:是一種結構,它包含值和指向其類的隱藏指針。

   (3)實例:對象的另一種叫法。

   (4)消息:是對象可以執行的操作。用於通知對象去做什么,如[ shape draw ]代碼,通過向shape對象發送draw消息來通知對象繪制自身,對象接收消息后,將查詢對應的類。

   (5)方法調度程序:是Objective-C使用的一種機制,用於推測執行什么方法以響應某個特定的消息。

   (6)接口:是對象的類應該提供的特性的描述,例如Circle類的接口聲明Circle類可以接受draw消息。

   (7)消息:是使接口正常工作的代碼。

2.接着看看Objective-C是如何定義接口@interface的:

  (1)一下是一個Circle類的接口    [plain] view plaincopy
  1. @interface Circle : NSObject  
  2.    {  
  3.        ShapeColor  fillColor;  
  4.        ShapeRect  bounds;  
  5.    }   
  6.    -(void)setFillColor : (ShapeColor) fillColor;  
  7.    -(void)setBounds : (ShapeRect) bounds;  
  8.    -(void) draw;  
  9.    @end//這里定義了一個Circle接口  

    (2)接下來分析一下這個接口的接口:

        第一行: @interface Circle : NSObject,看到@符號,可以把它看成是C 的一種擴展,告訴編譯器,這是一個接口。

       第二至第五行:的意思是,告訴編譯器Circle對象需要的各種數據成員(也稱為Circle類對象的實例變量)

       第六至八行:是這個類的方法聲明,“-”表示是聲明不是定義,(void)是返回類型,setFillColor是方法名,緊接着的冒號只有當方法帶參數時才會有冒號,冒號后跟的是參數

    (3)接下來看看怎么使用@implementation來實現接口:    

[plain] view plaincopy
  1. @implementation Circle  
  2.        -(void) setFillColor : (ShapeColor) c  
  3.         {  
  4.              fillColor = c;  
  5.         }   
  6.         -(void) setBounds : (ShapeRect) b   
  7.         {  
  8.               bounds = b;  
  9.         }  
  10.         -(void) draw  
  11.         {  
  12.              NSLog(@"drawing a circle at (%d %d %d %d) in %@" , bound.x , bound.y , bound.width , bound.height , colorName(fillColor));  
  13.         }  
  14.         @end//這里實現了Circle接口  

    (4)分析實現代碼的結構:

        第一行:是一個編譯器指令,表明你將為某個類提供代碼。

        第二行到最后:是對接口的全部方法的實現。

     (5)接下來講講怎么實例化對象,可以看看一下例子:

[plain] view plaincopy
  1. int main (int  argc,  const char *argv[ ])  
  2.          {  
  3.                id  shapes [ 3];  
  4.                ShapeRect  rect0 = {0,0,10,30};  
  5.                shapes[0] = [Circle new];  
  6.                [ shapes[0]  setBounds : rect0 ];  
  7.                [ shapes[0]  setFillColor : kRedColor ];  
  8.                  
  9.                ShapeRect  rect1 = {20,30,50,60};  
  10.                shapes[1] = [Rectangle new];  
  11.                [ shapes[1]  setBounds : rect1 ];  
  12.                [ shapes[1]  setFillColor : kGreenColor ];  
  13.   
  14.                ShapeRect  rect0 = {13,21,35,25};  
  15.                shapes[2] = [ObiantaSphereoid  new];  
  16.                [ shapes[2]  setBounds : rect2 ];  
  17.                [ shapes[2]  setFillColor : kBlueColor ];  
  18.                drawShapes (shapes, 3);  
  19.                return (0);  
  20.          }//注意上面的shapes不是數組,而是指向對象的指針。  

         第五行:意思是向Circle傳一個new消息,用於創建一個實例對象。

         第六行和第七行:意思是向實例對象分別傳遞兩帶參數的消息,其實就和調用帶參數的函數的意思是一樣的。來設置相關的屬性。

        Circle查找方法的過程圖如下:

         

      好!今天就寫那么多,歡迎大家一起討論,轉載請注明:http://blog.csdn.net/yuzhiboyi


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: