《objective-c基礎教程》學習筆記(七)—— 存取方法

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   使用   sp   for   

  在上一篇博文中,我們有拿一個簡單的“汽車模型”來講解複合關係。在今天的這篇博文中,我們將接著上一次的例子,講解下存取(accessor)方法的使用。所謂存取方法,就是用來讀取或改變某個對象屬性的方法。如果添加一個方法去改變Car對象中的engine物件變數,那它就是一個存取方法。

  存取方法分為兩種:setter方法和getter方法。setter方法,是為對象中的變數賦值。getter方法,是通過對象本身訪問對象屬性。

  在Objective-c中,Cocoa架構在定義存取方法的時候,有相關的規定:

  (1). setter方法,根據它的所要去改變的屬性名稱來命名,並在前面加set首碼。如:setEngine,setTire等。

  (2). getter方法,則是以其返回的屬性名稱來命名,不要get首碼加到getter方法名前面。因為在Cocoa中,get首碼有其他的用途。一般意味著這個方法會將你傳遞的參數作為指標來返回數值。

  介紹完了基本的概念和定義的規則。下面,我們就來修改“汽車模型”,給汽車的engine和tire設定存取方法。

首先,先在Car對象定義中添加engine和tire的存取方法:

 1 @interface Car : NSObject 2     { 3         Engine *engine; 4         Tire *tires[4]; //四個輪子,定義一個四個數的數組。 5     } 6     -(Engine *) engine;  7     -(void) setEngine:(Engine *) newEngine; 8     -(Tire *) tireAtIndex:(int) index; 9     -(void) setTire:(Tire *) tire atIndex:(int) index;10     -(void) drive;11 @end // Car

  由於,tire有四個子集,所以這裡還添加了一個atIndex參數,表示第幾個輪子。接下來,實現Car中定義的儲存方法:

 1 @implementation Car 2     -(void) setEngine:(Engine *) newEngine 3     { 4         engine = newEngine; 5     } 6  7     -(Engine *) engine 8     { 9         return (engine);10     }11 12     -(void) setTire:(Tire *) tire13             atIndex:(int) index14     {15         if(index<0 || index>3)16         {17             NSLog(@"bad index(%d) in setTire:atIndex",18                   index);19             exit(1);20         } 21         tires[index] = tire;22     }23 24     -(Tire *) tireAtIndex:(int) index25     {26         if(index<0 || index>3)27         {28             NSLog(@"bad index(%d)in tireAtIndex:",29                   index);30             exit(1);31         }32         return (tires[index]);33     }34 35     -(void) drive{36         NSLog(@"%@",engine);37         NSLog(@"%@",tires[0]);38         NSLog(@"%@",tires[1]);39         NSLog(@"%@",tires[2]);40         NSLog(@"%@",tires[3]);41     }42 @end

  為了傳入的index參數不符合條件,使得超出數組,我們做了簡單的判斷。最後,我們修改main主函數:

 1 int main(int argc, const char * argv[]) 2 { 3     Car *car = [Car new]; 4     Engine *engine = [Engine new]; 5     [car setEngine:engine]; 6     for(int i=0;i<4;i++) 7     { 8         Tire *tire = [Tire new]; 9         [car setTire:tire atIndex:i];10     }11     12     [car drive];13     return 0;14 }

  這時,我們發現:之前在Car中定義的init初始化方法,這邊移除掉了。由於Car現在自己定義了訪問engine和tires變數的方法。所以,不需要init方法來建立。而是直接在主函數中建立Engine和Tire。

  運行結果和之前的沒有區別:

  通過這個簡單修改的例子,希望大家對Cocoa架構中的存取方法的使用方法有更深的瞭解。

《objective-c基礎教程》學習筆記(七)—— 存取方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.