iPhone開發進階(1) — 深入理解iPhone OS/SDK與Objective-C 2.0

來源:互聯網
上載者:User
  • 博主:易飛揚
  • 原文連結 : http://www.yifeiyang.net/iphone-development-advanced-1-depth-understanding-of-iphone-os-sdk-and-objective-c-2-0/
  • 轉載請保留上面文字。iPhone開發進階(1) --- 深入理解iPhone OS/SDK與Objective-C 2.0

    工欲善其事,必先利其器。在開發iPhone應用程式的時候,深入理解iPhone OS/SDK與Objective-C 2.0是很重要的。

    iPhone OS

    iPhone OS 由4個主要部分組成。下面簡單地羅列一下它們的功能。

    Cocoa Touch
    • 視窗和視圖
    • 事件管理
    • 使用者介面
    • 加速感應器
    • 照相機
    Media
    • Core Graphics(2維圖形介面)
    • Core Animation(動畫)
    • OpenGL
    • Core Audio(聲音)
    • OpenAL
    • Media Player(MPEG4,MP3)
    Core Services
    • Address Book
    • Core Foundation
    • Core Location
    • CFNetwork(http,https,ftp,SSL,TLS)
    • 網路安全
    • SQLite(SQL資料庫)
    • XML
    Core OS
    • 多線程
    • 網路應用(BSD通訊端)
    • 檔案系統
    • Bonjour(利用無線網路串連其他機器)
    iPhone SDK

    iPhone SDK 中主要包含下列4個工具。

    • Xcode - 專案管理、代碼編輯、編譯、調試(IDE)
    • Interface Builder - GUI 設計
    • iPhone Simulator - 模擬器
    • Instrument - 效能測試、調整

    實際開發的過程中,基本上是在使用 Xcode 與 Interface Builder 來進行的。調試則是使用模擬器或者實際裝置。要注意的是在PC上類比程式,由於PC的主頻,效能高於實際裝置,所以不能只在模擬器上調試。除此之外,一些類,功能在模擬器上也是不能使用的,比如 NSDateCalendar 類,或者是照相機功能。

    Objective-C 2.0記憶體管理

    雖然 Objective-C 2.0 已經支援了垃圾收集了,但是 iPhone OS 中卻不能使用它。所以我們需要自己來管理記憶體。Objective-C 的記憶體管理方式與使用引用計數的方式,就是說對象有一個計數器,引用對象一次,計數器加一,當計數器為0的時候,該對象的記憶體被釋放。

    建立對象執行個體的時候(init,alloc)應用計數加一,執行過程中,別的對象如果需要該對象,需要用(retain)來引用它,這時,該對象的應用計數器加一。不需要對象的時候用(release)來釋放,這時引用計數器減一,當計數器為0的時候,釋放該對象記憶體。

    • init,alloc - 計數器 +1
    • retain - 計數器 +1
    • release - 計數器 -1

    另外如果不使用 retain,release,可以使用(autorelease)來自動釋放對象。

    容器

    Objective-C 中的容器主要有以下3種:

    • 數組
    • 字典
    • Set

    向容器中添加的內容不能直接用 int 或 float,需要通過 NSNumber 等封裝類來實現。Objective-C 2.0 開始可以使用迭代子(Enumerator),來順序訪問容器中的元素。

    Notification

    Notification是訊息通知的功能。具體使用 NSNotificationCenter 類。將需要接受通知的對象,方法,事件註冊到該類上。

    歸檔(Archive)

    歸檔是指將對象的記憶體布局原樣地儲存到檔案系統上。同樣對應的由檔案中的資料產生對象叫做UnAchive。在 iPhone SDK 中使用 NSKeyedArchiver 和 NSKeyedUnarchiver 類來實現。

    一般在程式結束的時候,儲存當前的狀態,再次啟動的時候UnAchive一下,就又回到了剛才退出時的狀態。下面是一個例子:

     

    // MyKeyedArchiver.h
    #import <Cocoa/Cocoa.h>

    @interface NSKeyedArchiver (MyKeyedArchiver)

    - (void)encodeValueOfObjCType const char *)valueType at const void *)address;

    @end

     

    #import "MyKeyedArchiver.h"

    @implementation NSKeyedArchiver (MyKeyedArchiver)

    - (void)encodeValueOfObjCType const char *)valueType at const void *)address
    {
        NSMutableData *datas = [NSMutableData data];
        NSArchiver *arch = [[NSArchiver alloc] initForWritingWithMutableData:datas];
        [arch encodeValueOfObjCType:valueType
                                 at:address];
        [self encodeObject:[NSData dataWithData:datas]];
        [arch release];
    }

    @end

     

     

    // MyKeyedUnarchiver.h
    #import <Cocoa/Cocoa.h>

    @interface NSKeyedUnarchiver (MyKeyedUnarchiver)

    - (void)decodeValueOfObjCType const char *)valueType at void *)data;

    @end

     

     

    #import "MyKeyedUnarchiver.h"

    @implementation NSKeyedUnarchiver (MyKeyedUnarchiver)

    - (void)decodeValueOfObjCType const char *)valueType at void *)data
    {
        NSData *datas = [self decodeObject];
        NSUnarchiver *unarch = [[NSUnarchiver alloc] initForReadingWithData:datas];
        [unarch decodeValueOfObjCType:valueType
                                   at:data];
        [unarch release];
    }

    @end

     

  • 聯繫我們

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