Obj-C 初識

來源:互聯網
上載者:User

1、Obj-C代碼的副檔名為“.m”.

 

2、Obj-C的要包含標頭檔時,可以使用  #include  但更一般的使用  #import  ( 由GCC編譯器提供),後者可以保證標頭檔只被包含一次(l類似C中的#ifdef)。

 

3、有關Cocoa 的架構,可參照

http://www.cocoachina.com/newbie/basic/2009/0611/130.html

 4、hello Objecitve-C

#import <Foundation/Foundation.h>

Int main(int argc, const char *arge[])

{

  NSLog (@”Hello Obj-C!”);

  Return (0);

}

 

NSLog()函數中的NS:Cocoa對所有函數、常量和類型名稱都添加了NS首碼。(NSLog(@”%d is  a  %@”,a,@”num”);)

@”Hello Obj-C!”:obj-c添加的特性,雙引號中的 字串前有一個@,表示引用的字串應該作為Cocoa的NSString元素處理。

 

5、c中的bool的true和false對應Cocoa中的BOOL的YES和NO()1個位元組.(注意:在obj-c中不能理解 非零值為YES,1不等於YES)

 

6、Id 類型

      在Objective-C 中,id 類型是一個獨特的資料類型。在概念上,類似Java 的Object 類,可以轉換為任何資料類型。換句話說,id 類型的變數可以存放任何資料類型的對象。在內部處理上,這種類型被定義為指向對象的指標,實際上是一個指向這種對象的執行個體變數的指標。id 是一個指向任何一個繼承了Object(或者NSObject)類的對象。需要注意的是id 是一個指標,所以在使用id的時候不需要加星號。http://book.51cto.com/art/201105/262238.htm

7、obj-c中的方括弧:

用於通知某個對象該幹什麼。在方括弧中,第一項是對象,其餘部分是你需要對象執行的操作(調用函數)。

 

8、方法聲明與調用:

@interface Circle : NSObject

{

  ShapeColor  fillColor;

  ShapeRect   bounds;

}//建立兩個執行個體變數

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end // Circle

 

 

@interface Circle : NSObject  ---定義了Circle的 類,該類是基於NSObject的,即繼承。

 

- (void) draw; 前面的短線表示這是obj-c中的方法聲明,這是一種區分函數原型與方法聲明的方式;void代表傳回值為空白,draw為方法名。

 

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

這兩個聲明的方法中都有一個參數, (參數類型)參數 

有如:

-(void) setTo: (int) n over: (int) d

{
numerator = n;
denominator = d;
}

 [aFraction setTo: 100 over: 200];//調用

註:objective-c 的方法參數名有些怪異,第一個參數是沒有參數名的,如果硬要說有,那就是方法名,

統一說來,見到冒號,冒號前面那個就是參數名。 

 

再舉例,沒有參數名的方法定義與調用:

 

-(int) set: (int) n: (int) d;

[aFraction set: 1 : 3];//調用

(http://www.cnblogs.com/54007/archive/2011/02/10/1950801.html)

@interface為類的聲明,一般在標頭檔中;@implementation為類的實現,一般在”.m”檔案中,接下來就是各個方法的定義,不必按照@interface中的順序定義方法,甚至可以定義在@interface中無相應聲明的方法。@interface和@implementation方法的形式參數名要避免相同。

 

9、執行個體化對象:id ivars = [Class new];

 

10、每個方法的調用都包括了一個名為self的隱藏函數,同時對象本身。使用self參數後,方法可以尋找並操作對象的資料(this指標)。

 

11、繼承:e.g. @interface Circle : NSObject

   Obj-c不支援多繼承,例如:@interface Circle : NSObject , PrintableObject是不能夠被編譯器識別的。但是可以從其他特性吸收多繼承的優點:如分類、協議。

 

12、重構:移動和簡化代碼的方式。

 

13、obj-c中的super相當於調用父類的方法,在重寫方法中充分利用超類代碼。

 

14、description:

-------------------------------------------------------

    @interface Tire :NSobject
@end

@implementation tire

-(NSstring *) description
{
return(@"i am a tire");
}

 

    NSLog (@"%@", tires);

 

descriptong方法預設返回對象的描述資訊,
NSLog(@"%@", objectA);這會自動調用objectA的descriptong方法來輸出ObjectA的描述資訊,
當我們重寫某個類的descriptong方法後,
再次輸出NSLog(@"%@", objectA);時,就會調用我們覆寫的descriptong方法,這樣就達到自訂對象的描述資訊!!!

 

15、存取方法(accessor method):用來讀取或改變對象特定屬性的方法。如setter、getter方      法(注意:setter方法的方法名一般加set首碼,e.g.setEngine,getter則根據返回的屬性的名稱來命名,e.g.engine.因為get在cocoa中有特殊含義,它意味著這個方法會通過你當做參數傳入的指標來返回數值)。

在對其他對象的屬性進行操作時,應該始終使用對象所提供的存取方法,永遠不要直接改變其他對象屬性的數值。如,main函數不應直接存取類的執行個體變數。這也是間接的一種體現。

 

16、exit()函數:exit(1)表示發生錯誤後退出程式,exit(0)表示正常退出。參數0和1是返回給作業系統的,作業系統根據參數判斷程式是否正常執行了。(that is 防禦式編程)

 

17、Obj-C中所有對象間的互動都是通過指標實現的。

 

18、@class  某些情況可代替#import ,減少編譯次數,e.g.在複合類中的標頭檔中使用。。。

 

19、一些有用的資料類型(struct):NSRange、NSPoint、NSSize、NSRect…..

 

20、NSString類的方法

  建立字串  +(id) stringWithFormat : (NSString *) format,……;

  e.g.   NSString *height;

height = [ NSString stringWithFormat: @”height is %d feet, %d inchs”,5 , 11];

  如果在聲明方法時添加了加號,表示這個方法定義為類方法(Factory 方法)。這個方法屬於類對象(而不是類的執行個體對象)並且通常用於建立新的執行個體。

  大小 -(unsigned int) length;

  e.g.   unsigned int length = [height length];

  比較 – (BOOL) isEqulToString: (NSString *) aSting; 還有compare方法

  檢查字串內是否還包含別的字串:hasPrefix  hasSuffix

 

NSSting為不可改變的字串類型,其子類NSMutableString為可修給的字串類型。

NSMutableString類的方法:

  建立  stringWithCapacity,當然stringWithFormat也可以

  添加字元: appendString 、 appendFormat

  刪減字元: deleteCharactersInRange與rangeOfString集合使用

21、NSArray類:

  建立 arrayWithObjects方法

  e.g.   NSArray *array;

array = [NSArray arrayWithObjecrs: @”one”, @”two”, @”three” , nil];(nil空,表列表結束)

[array count]可獲得數組個數

[array objectAtIndex:i]  可得到數組的內容(索引遍曆)

切分數組componentsSeparatedByString

合并數組componentsJoinedByStrring

可變數組NSMutableArray類:addObject,removedObjectAtIndex

22、列舉程式NSEnumerator

NSEnumerator *enumerator;

Enumerator = [array objectEnumerator];//向數組請求列舉程式

id thingie;

while(thingie = [enumerator nextObject]){

 NSLog(@”I found %@”, thingie);

}

23、快速枚舉:

  for(NSSting *string in array){

      NSLog(@”I found %@”, string);

}

24、NSDictionary字典  散列表  關聯陣列:在給定的key(通常是NSString)下儲存一個value(可以使任何類型的對象)

Of course, 也有NSMutableDictionary

25、NSNumber:Cocoa用來封裝基礎資料型別 (Elementary Data Type)的類。

    NSValue可以封裝任意值

相關文章

聯繫我們

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