objective-c總結

jopen 12年前發布 | 54K 次閱讀 Objective-C開發 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
  2. 語句
     循環語句:for, while, do while, break, continue
     分支:if, else, switch
  3. NSlog()函數:與printf()類似,向控制臺輸出信息。但它增加了時間戳等一些特性。
    例:向控制臺輸出hello world。
       NSString *str = @"hello world";
       NSLog(@"%@", str);
       %@表示輸出NSString類型;
       雙引號的前面的@表示這雙引號中的字符串應該作為cocoa的NSString元素來處理。
  4. 布爾類型BOOL:值為YES,NO;
  5. objective-c中的方括號:
    1) 用于通知某個對象該做什么。
    2) 方括號內第一項是對象,其余部分是你需要對象執行的操作。
    3) 在objective-c中通知對象執行某種操作,稱為發送消息。(也叫調用方法)
  6. 標識符id:是一種泛型,用于表示任何種類的對象。
  7. 類聲明@interface:
    例:
    @interface Circle:NSObject   //為Circle類定義接口;NSObject表示是父類。
    {//以下是數據成員
       ShapeColor fillColor;
       ShapeRect bounds;
    }
    //以下是方法聲明
    -(void) setFillColor: (ShapeColor) fillColor;  //前面的短線表明這是方法聲明
                                       //短線后面是方法的返回類型
                                       //接著是方法名
    //冒號后面是參數,其中(ShapeColor)是參數類型,
    fillColor是參數名
    -(void) setBounds:(ShapeRect) bounds;
    -(void) draw;
    //減號就是普通函數
    加號就是靜態函數
    @end     //結束聲明
  8. self,隱藏對象self對應于C中的this。
       Self->fillcolor來訪問成員變量。
  9. 調用寫好的類和類函數:
    //創建新對象,使用缺省初始化函數
        Bank *bankDefault = [[Bank alloc] init];
    //調用方法:
        [bank addAmount: 1];
        [bank print];
    // 釋放對象:
        [bankDefault free];
  10. 兩個參數的方法:
    -(void) setTire: (Tire *) tire  //聲明
          atIndex: (int) index;
    //使用
    [car setTire:tire atIndex:2];
    objective-c高級特性:
  11. 繼承
    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類:可以存放任意類型的對象.
    它有兩個限制:
  14. 它只能存儲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:自動釋放內存池。
  15. 內存管理
    每個對象都有一個與之關聯的引用計數(也叫保留計數)
    當使用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軟件,不能使用垃圾回收。
    5.        
    對象初始化
    兩種創建新對象的方法:
    [類名 new]
    [[類名 alloc] init]
    這兩種方法是等價的,但cocoa的慣例是使用后者。
    alloc在為對象分配空間的同時,將這塊內存初始化為0;
    Init方法:初始化實例變量,使對象處于可用狀態。[返回類型為id,  返回的值描述了被初始化的對象]
    使用new創建新對象時,系統要完成兩個步驟:
    1.  為對象分配內存,即對象獲得一個用來存放其實例變量的內存塊;
    2.  自動調用init方法,讓該對象處于可用狀態。
    6.    
    objective-c 2.0的新特性【只適用于mac os x10.5及以上】
    @property :表示聲明了對象的屬性。這樣就不用再寫屬性的訪問器了。
    (他有copy, retain, readwrite, readonly等屬性)
    @synthesize:表示“創建該屬性的訪問器”
    點表達式
    7.    
    類別
    類別(category)是一種為現有的類添加新方法的方式。
    類別的聲明:
    @interface NSString (NumberConvenience) //類名 (類別名)
    -(NSNumber) lengthAsNumber;            //擴充方法聲明
    @end
    使用時使用原來的類名,就可以調用他的所有類別中的方法。
    類別的局限性:
    1.    不能向類中添加新的實例變量;
    2.    在類別中的方法若與類中現有的方法重名,則類中的方法不可用,被類別中的新方法取代。
    類別的作用:
    1.    將類的實現分散到多個文件或框架中;
    2.    創建對私有方法的前向引用;
    【Cocoa中沒有真正的私有方法,則實現私有方法類似功能的方法為:
    先在類別中聲明方法;然后到現有類的實現中實現該方法。
    這樣這個類中的其他方法可以使用該方法,而其他外部的類就不會知道該方法的存在了。】
    3.    向對象添加非正式協議。
    【創建一個NSObject的類別稱為創建一個非正式協議。】
    委托delegate是一種對象,另一個類的對象會要求委托對象執行它的某些操作。
    受委托對象在某個時間(某個事件觸發)時,會自動通知委托對象執行委托方法。
    選擇器:@selector():選擇器只是一個方法名稱,但它以objective-c運行時使用的特殊方式編碼,以快速執行查詢。圓括號中的內容是方法名。
    所以Car類的setEngine:方法的選擇器是:@selector(setEngine:
    受委托對象如何知道其委托對象是否能處理它(受委托對象)發送給它(委托對象)的消息?
    通過選擇器,受委托對象先檢查委托對象,詢問其是否能響應該選擇器。如果能,則向它發送消息。
    8.    
    協議:
    正式協議是一個命名的方法列表。
    采用協議意味著必須實現該協議的所有方法。否則,編譯器會發出警告。
    正式協議就像JAVA中的接口一樣。
    聲明協議:
    @protocal NSCopying
    -(id) copywithzone:(NSZone
    ) zone; //方法列表
    @end
    采用協議:
    @interface Car:NSObject <NSCopying,NSCoding> //中括號中是要實現的協議列表
    {//實例變量列表}
    //方法列表
    @end
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!