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

來源:互聯網
上載者:User

工欲善其事,必先利其器。在開發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.