天天看點

objective-c總結

1. 在objective-c中使用#import<>導入系統頭檔案,#import""導入使用者頭檔案,#import可以保證頭檔案隻被包含一次。 

2.  基本資料類型總結 

2.1 基本資料類型分類 

1) 整型 

    int,short int, long int 

2) 浮點型 

    float, double 

3) 字元型 

    char 

2.2 資料輸出格式: 

1) int 

輸出格式符:%i, %d, %o, %x 

   unsigned int 

輸出格式符:%u 

   short 

輸出格式符:%hi, %hd 

   unsigned short int 

輸出格式符:%hu 

   long int 

輸出格式符: %li, %ld 

   unsigned long int 

輸出格式符:%lu 

2) float,double 

輸出格式符:%f, %e, %g 

   long double 

輸出格式符: %lf 

3) char 

輸出格式符:%c,字元串為%s 

3. 語句 

 循環語句:for, while, do while, break, continue 

 分支:if, else, switch 

4. NSlog()函數:與printf()類似,向控制台輸出資訊。但它增加了時間戳等一些特性。 

例:向控制台輸出hello world。 

   NSString *str = @"hello world"; 

   NSLog(@"%@", str); 

   %@表示輸出NSString類型; 

   雙引号的前面的@表示這雙引号中的字元串應該作為cocoa的NSString元素來處理。 

5. 布爾類型BOOL:值為YES,NO; 

6. objective-c中的方括号: 

1) 用于通知某個對象該做什麼。 

2) 方括号内第一項是對象,其餘部分是你需要對象執行的操作。 

3) 在objective-c中通知對象執行某種操作,稱為發送消息。(也叫調用方法) 

7. 辨別符id:是一種泛型,用于表示任何種類的對象。 

8. 類聲明@interface: 

例: 

@interface  Circle:NSObject   //為Circle類定義接口;NSObject表示是父類。 

{//以下是資料成員 

   ShapeColor fillColor; 

   ShapeRect bounds; 

//以下是方法聲明 

-(void) setFillColor: (ShapeColor) fillColor;  //前面的短線表明這是方法聲明 

                                   //短線後面是方法的傳回類型 

                                   //接着是方法名 

//冒号後面是參數,其中(ShapeColor)是參數類型, 

fillColor是參數名 

-(void) setBounds:(ShapeRect) bounds; 

-(void) draw; 

//減号就是普通函數 

加号就是靜态函數 

@end     //結束聲明 

9. self,隐藏對象self對應于C中的this。 

   Self->fillcolor來通路成員變量。 

10. 調用寫好的類和類函數: 

//建立新對象,使用預設初始化函數 

    Bank *bankDefault = [[Bank alloc] init]; 

//調用方法: 

    [bank addAmount: 1]; 

    [bank print]; 

// 釋放對象: 

    [bankDefault free]; 

11. 兩個參數的方法: 

-(void) setTire: (Tire *) tire  //聲明 

      atIndex: (int) index; 

//使用 

[car setTire:tire atIndex:2]; 

objective-c進階特性: 

12. 繼承 

Objective-c不支援多繼承。 

Super 關鍵字:調用該類的父類; 

超類:父類的另一種說法。 

12. 自定義NSLog()輸出: 

在類中添加description方法就可以自定義NSLog()如何輸出對象。 

@implementation Tire 

-(NSString *) description 

   Return (@”I am a tire.”); 

Main() 

    NSLog(@”%@”,tire[0]); 

13. Foundation kit: 

Cocoa是由兩部分架構組成的:foundation kit [包括一些基礎類]和 application kit.【包括使用者接口對象和進階類】 

建立字元串: 

1) NSString *test; 

test=[NSString stringWithFormat:@"i'm %d years old!",23]; 

若在聲明方法時在方法前面添加了加号,那就表示把這個方法定義為類方法【這個方法屬于類對象,而不是類的執行個體對象。 

NSArray類:可以存放任意類型的對象. 

它有兩個限制: 

1. 它隻能存儲objective-c的對象,但不能存儲C中的基本資料類型,如int , float, enum, struct等。 

2.不能存儲nil(對象的零值或NULL值);【因為在建立NSArray時,要在清單結尾添加nil代表清單結束。】 

2) 建立NSArray: 

NSArray *array; 

array=[NSArray arrayWithObjects:@"one",@"two",nil];  

NSString, NSMutableString類; 

NSString是不可變的,即一旦建立完成,就不能通過删除字元或添加字元的方式來改變它; 

而NSMutableString是可變的。 

NSArray, NSMutableArray類; 

NSEnumerator枚舉; 

NSEnumerator *enum; 

enum=[array objectEnumerator]; 

Id thingie; 

While(thingie=[enumerator nextObject]){} 

NSDictionary:字典(關鍵字及其定義的集合。)【也成為散清單,關聯數組】,NSMutableDictionary類; 

NSNumber:用來包裝基本資料類型,如int ,char, float, bool;【将一個基本類型的資料包裝成對象叫做裝箱。】 

NSValue:它可以包裝任何類,NSNumber是它的子類。 

NSNull: 

 在cocoa中看到“CF”字樣時,就表示它是蘋果公司的Core Foundation 架構相關的内容。 

 NSAutoreleasePool:自動釋放記憶體池。 

14. 記憶體管理 

每個對象都有一個與之關聯的引用計數(也叫保留計數) 

當使用alloc, new 方法或通過 copy消息(生成接收對象的一個副本)建立一個對象時,對象的引用計數值被設為1;

 給對象發retain消息時,增加該值; 

 發送release消息時,減少該值; 

當一個對象的引用計數值變為0時,objective-c會自動向對象發送一條dealloc消息。銷毀該對象。 

你可以在自己的對象中重寫該方法, 

使用retainCount消息,可以擷取引用計數器的值。 

-(id) retain; 

-(void) release; 

-(unsigned) retainCount;     

自動釋放池:autorelease pool; 

建立: 

NSAutoreleasePool *pool; 

pool=[[NSAutoreleasePool alloc] init]; 

銷毀: 

[pool release]; 

注意:xcode自動生成的代碼,銷毀pool池時,使用的是[pool drain],drain方法隻是清空釋放池,但不銷毀pool.是以在自己編寫代碼時還是使用 

release. 

而且,drain隻适用于MAC OS 10.4以上的版本,而release适用于所有版本。 

隻有在向某個對象發送autorelease消息時,該對象才會添加到NSAutoreleasepool中,才會被自動釋放。 

如:[car autorelease]; 

記憶體管理黃金準則: 

隻有通過alloc, new和 copy方法建立的對象,才需要程式員負責向該對象發送release或autorelease消息。 

而通過其他方法獲得的對象,則預設為已經被設定為自動釋放,是以不需要程式員做任何操作了。 

在objective-c 2.0中有垃圾回收機制, 

如果要對某個項目使用垃圾回收: 

項目資訊--build頁籤--查詢"garb",出現“objective-c Garbage Collection”,将其值設定為“required[-fobjc-gc-only]” 

啟用垃圾回收後,通常的記憶體管理指令全都變成了空操作指令,不執行任何操作。 

開發iphone軟體,不能使用垃圾回收。 

15.         

對象初始化 

兩種建立新對象的方法: 

[類名 new] 

[[類名 alloc] init] 

這兩種方法是等價的,但cocoa的慣例是使用後者。 

alloc在為對象配置設定空間的同時,将這塊記憶體初始化為0; 

Init方法:初始化執行個體變量,使對象處于可用狀态。[傳回類型為id,  傳回的值描述了被初始化的對象] 

使用new建立新對象時,系統要完成兩個步驟: 

1).  為對象配置設定記憶體,即對象獲得一個用來存放其執行個體變量的記憶體塊; 

2).  自動調用init方法,讓該對象處于可用狀态。 

16.     

objective-c 2.0的新特性【隻适用于mac os x10.5及以上】 

@property :表示聲明了對象的屬性。這樣就不用再寫屬性的通路器了。 

(他有copy, retain, readwrite, readonly等屬性) 

@synthesize:表示“建立該屬性的通路器” 

點表達式 

17.     

類别 

類别(category)是一種為現有的類添加新方法的方式。 

類别的聲明: 

@interface  NSString (NumberConvenience) //類名 (類别名) 

-(NSNumber) lengthAsNumber;            //擴充方法聲明 

@end  

使用時使用原來的類名,就可以調用他的所有類别中的方法。 

類别的局限性: 

1).    不能向類中添加新的執行個體變量; 

2).    在類别中的方法若與類中現有的方法重名,則類中的方法不可用,被類别中的新方法取代。 

類别的作用: 

1).    将類的實作分散到多個檔案或架構中; 

2).    建立對私有方法的前向引用; 

【Cocoa中沒有真正的私有方法,則實作私有方法類似功能的方法為: 

先在類别中聲明方法;然後到現有類的實作中實作該方法。 

這樣這個類中的其他方法可以使用該方法,而其他外部的類就不會知道該方法的存在了。】 

3).    向對象添加非正式協定。 

【建立一個NSObject的類别稱為建立一個非正式協定。】 

委托delegate是一種對象,另一個類的對象會要求委托對象執行它的某些操作。 

受委托對象在某個時間(某個事件觸發)時,會自動通知委托對象執行委托方法。 

選擇器:@selector():選擇器隻是一個方法名稱,但它以objective-c運作時使用的特殊方式編碼,以快速執行查詢。圓括号中的内容是方法名。 

是以Car類的setEngine:方法的選擇器是:@selector(setEngine: 

受委托對象如何知道其委托對象是否能處理它(受委托對象)發送給它(委托對象)的消息? 

通過選擇器,受委托對象先檢查委托對象,詢問其是否能響應該選擇器。如果能,則向它發送消息。 

18.     

協定: 

正式協定是一個命名的方法清單。 

采用協定意味着必須實作該協定的所有方法。否則,編譯器會發出警告。 

正式協定就像JAVA中的接口一樣。 

聲明協定: 

@protocal NSCopying 

-(id) copywithzone:(NSZone *) zone; //方法清單 

@end  

采用協定: 

@interface  Car:NSObject <NSCopying,NSCoding> //中括号中是要實作的協定清單 

{//執行個體變量清單} 

//方法清單 

@end