iphone學習筆記(三)

來源:互聯網
上載者:User
3類、對象、方法在本章中,你講學習一些物件導向編程的技巧及如何在objective-c中編寫類。什麼是對象

我們通過一個日常的例子來解釋它。我們假設您擁有一輛轎車,很顯然這輛車就是一個對象。現在你沒有任何一輛車,那麼你的車有可能在底特律、日本或者世界上任何一個地方的工廠裡製造中,是個抽象的。 而相應的你可能會去駕駛它,給它加油,洗車等等,這些都是針對於這個對象發生的動作。(這些,類,對象等含義與其他物件導向程式設計語言相同,因此定義方面也就不多說了)

現在通過實際例子來快速瞭解吧。下面假設你不瞭解類、方法等。你寫的程式可能是這個樣子的:

下面是物件導向方式的寫法。

在objective-c中,類的聲明分為兩部分。

  1. 定義部分:以@interface開頭,@end結尾。定義了類中的成員,方法,方法的傳回型別,參數等。
  2. 實現部分:類名同聲明時的類名相同,如下例中的 Fraction 。對於定義中的實現。
#import<Foundation/Foundation.h>@interface Fraction:NSObject{     int numerator;     int denominator;}-(void)  print;-(void)  setNumerator:(int) n;-(void)  setDenomainator:(int) d;@end@implementation Fraction-(void) print{   NSLog(@"%i/%i",numerator,denominator);}-(void) setNumerator:(int) n{    numerator=n;}-(void) setDenominator:(int) d{    denominator=d;}@endint main(int argc,char *argv[]){   NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init]  Fraction *myFraction;  //建立一個執行個體  myFraction=[Fraction alloc];  myFraction=[myFraction init];  //給前面定義的變數賦值  [myFraction setNumerator:1];   [myFraction setDenominator:3];   //顯示輸出結果  NSLog(@"The value of myFraction is:");  [myFraction print];  [myFraction release];  [pool drain];  return 0;}

我為了熟悉這個定義調用等方法,自己照葫蘆畫瓢做了一個,調試的時候總是報錯:cannot init a class object  找了半天才發現,原來是建立執行個體的時候如下。

//建立一個執行個體  myFraction=[Fraction alloc];  myFraction=[myFraction init];

我誤將myFraction=[myFraction init];  寫成 myFraction=[Fraction init];  了  myFraction才是執行個體,Fraction是類名,怪不得會報那個錯呢。呵呵,不過這樣對於objective-c中對於對象的初始化有了更深的印象,出點錯也未嘗不是件好事。

現在具體分析下類的定義,及相關使用方法。

首先,定義一個類需要,給它取一個名字(這與所有物件導向程式設計語言相同),然後在objective-c中,需要指定該類的父類,也就是繼承自哪個類。如下

@interface Fraction:NSObject

NSObject相當於c#中的object,是根類。
然後在大括弧中間類成員,變數的定義。如下(傳回值,跟變數名,同其他語言一樣,沒什麼好說的)

 int numerator; int denominator;

接著是方法的定義。如下共定義了三個方法:print、setNumerator、setDenomainator   其中 (void)前面的 - 號表示表示該方法是執行個體方法,相應的 + 表示類方法。 這裡是與我之前接觸的程式設計語言大不相同的地方。 (void)不用多說,大家應該相當熟悉表示方法的傳回型別。接著是方法名稱如print、setNumerator等。

-(void)  print;-(void)  setNumerator:(int) n;-(void)  setDenomainator:(int) d;

需要注意的是objective-c中參數的前面需要有冒號 : 並且多個參數的話需要有多個冒號。如:

-(void) exampleMetho:(int) weight zhongliang:(int) height 

在weight後面的zhongliang是參數簽名用來標示參數作用的。
然後是實現部分@implementation  名稱需要與定義部分的名稱相同@implementation Fraction 。接著是實現之前所定義方法的具體代碼實現。

最後是main函數中,具體的調用過程。

NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init]  建立工程後 這一段系統會自動添加,具體原理等稍後的記憶體管理中會詳細解釋。

建立執行個體:Fraction *myFraction=[fraction allock]  等同於:

Fraction *myFraction;myFraction=[Fraction alloc];myFraction=[myFraction init];

釋放記憶體:[myFraction release]; 這個是與其他自動記憶體回收不同的地方。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.