關於Objective-C類聲明相關學習文檔

來源:互聯網
上載者:User

關於Objective-C類聲明相關學習文檔是本文要介紹的內容,主要介紹了Objective-C 類聲明,定義,執行個體,初始化。Objective-C中,調用方法被稱為發送訊息 ,通知對象執行某種操作。文法如下:[shape draw]

一、類聲明介面):

 
  1. @interface TestCoop : NSObject {  
  2.     int iMonth;  
  3.     int iYear;  
  4.     int iDay;  
  5. }  
  6.  
  7. - (void) setYear: (int) iYear;  
  8. - (void) primalSetData: (int)iYear :(int)iMonth :(int)iDay;  
  9. - (void) setData: (int)Year iMonth:(int)iMonth iDay:(int)iDay;  
  10. - (void) displayDateInfo;  
  11.  
  12. @end 

1、前面的短線/- 表示這是Objective-C方法的聲明,用來區分函數原型C語言中)與Objective—C中)方法聲明的方式。短線後面是方法的傳回型別/比如( void) ,位於圓括弧中。

1.1 注意,方法的聲明在括弧後面,@end之前 {}地區裡只有變數的定義,這點和C++很不一樣。

2、傳回型別後面自然是函數名字,和C語言一樣的,不同的是參數聲明方法

2.1、無參數的函數後面不需要加括弧和冒號,直接是函數名結束加分號,比如: - (void) displayDateInfo;

2.2、有參數的後面加冒號和參數類型名字,比如:

 
  1. - (void) setDay: (int) iDay; //單個參數  
  2. - (void) primalSetData: (int)iYear :(int)iMonth :(int)iDay;//多個參數 

objective還提供一種中綴符的文法,方法的名稱和參數都是和在一起的:

參數前面多加一個標識符,通常和變數名一樣,如下:

 
  1. - (void) setData: (int)Year iMonth:(int)iMonth iDay:(int)iDay;//多個參數 

蘋果推薦使用第二種方法,雖然繁瑣點。

二、類實現:

 
  1. @implementation TestCoop  
  2. - (void) displayDateInfo{  
  3.     NSLog(@"Today is: %d.%d.%d/n", iYear, iMonth, iDay);  
  4. }  
  5. - (void) setYear: (int) year{  
  6.     iYear = year;  
  7. }  
  8. - (void) primalSetData: (int)year :(int)month :(int)day{  
  9.     iYear = year;  
  10.     iMonth = month;  
  11.     iDay = day;      
  12. }  
  13. - (void) setData: (int)year iMonth:(int)month iDay:(int)day{  
  14.     iYear = year;  
  15.     iMonth = month;  
  16.     iDay = day;  

1、注意:類的方法實現部分函數參數不能和聲明部分一樣,就是不能和類變數同名,否則會隱藏初始變數。

比如:

 
  1. - (void) setYear: (int) year{ //right  
  2.     iYear = year;  

改成和聲明時一樣的話,如下:

 
  1. - (void) setYear: (int) iYear{ //error  
  2.     iYeariYear = iYear;  

明顯出問題了,xcode編譯會報warnging,就是初始變數被隱藏,其實本質就是變數範圍的問題,你局部變數和類變數名字一樣,

當然訪問不到了。

根由:聲明的時候Objective-C喜歡用類變數的名字來代替函數參數名,不知道為啥,真是個糾結的問題。要是從聲明的時候就不用,就OK了,也不用到定義時再去改,不知道蘋果那樣做的理由)。

三、執行個體化對象

 
  1. int main (int argc, const char * argv[]) {  
  2.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  3.  
  4.     // insert code here...  
  5.     //NSLog(@"%d-,%s %@/n", 12, "hel123lo", @"123");  
  6.       
  7.     TestCoop *ptest = [TestCoop new];   
  8.     [ptest primalSetData :2009 :03 :05];  
  9.     [ptest displayDateInfo];  
  10.     [ptest setData:2010 iMonth:06 iDay:06];  
  11.     [ptest displayDateInfo];  
  12.     [ptest setYear:1987];  
  13.     [ptest displayDateInfo];  
  14.     [pool drain];  
  15.     return 0;  

運行後會輸出如下資訊:

 
  1. Today is: 2009.3.5  
  2. Today is: 2010.6.6  
  3. Today is: 1987.6.6 

通過向需要建立對象的類發送new訊息,可以建立各個對象。

然後向對象發送各種訊息來操作對象。

//類的初始化

不過,cocoa習慣使用alloc和init來建立對象,而不是new

使用alloc來分配記憶體,並使用init來初始化,會將這塊記憶體全部清0,bool型為NO,int型為0,指標為nil

上面的建立對象代碼改成如下:

 
  1. TestCoop *ptest = [[TestCoop alloc] init]; 

小結:關於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.