[iOS Tutorial] 5 Object 的生命週期與 Foundation Framework

八月 31, 2012  Comments by

Objective-C 是一個物件導向的語言,所以物件的觀念必需非常清楚。當我們了解一個物件的 life cycle,以及 Foundation Framework 的基本類別之後,我們已經具備開發 App 所有邏輯的能力。

BOOL

首先 BOOL 的值為 YESNO

nil

nil 就是,代表「無」,物件指標指向 nil 的時候代表沒有任何東西。與 NULL 有類似的功能,但又聰明了一些。

  1. nil 是物件指標的 empty,不是所有型別指標的 empty,非物件指標的 empty 要用 NULL (char *c = NULL;)
  2. 傳送 message 給 nil 並不會 crash ([nil count];)

Instance vs. Class methods

命名規則一樣,Instance method 以 為開頭,Class method 以 + 為開頭。當然,這沒什麼好講的,大部分我們使用的都是 Instance method,而 Class method 通常用在產生物件 (alloc) 或者 Utility 上。

取得物件

除了生成的標準方式之外 ([ ClassName alloc] init];),還有三種方式可以取得物件。

1. 透過既有物件 Instance method 產生新的物件 (有新的物件生成在 heap 當中)。此例利用 urlString 附加 @"/about-us" 字串來產生新的字串給 aboutUsUrlString。

NSString *urlString = @"http://www.sappmemo.com.tw";
NSString *aboutUsUrlString = [urlString stringByAppendingString:@"/about-us"];

2. 透過 Class method 產生新的物件 (有新的物件生成在 heap 當中)。此例使用 NSArray 的 Class method 產生含有3個字串的 nameAry;

NSArray *nameAry = [NSArray arrayWithObjects:@"Sapp", @"Memo", @"Com", nil];

3. 透過既有物件 Instance method 取得參考物件 (沒有新的物件生成在 heap 當中)。此例的 lastString 取得 nameAry 中最後一個物件的參考。

NSArray *nameAry = [NSArray arrayWithObjects:@"Sapp", @"Memo", @"Com", nil];
NSString *lastString = [nameAry lastObject];// @"Com";

物件生成的過程

通常我們產生物件有兩個步驟,alloc 和 init,alloc 是在 heap 中配置一塊記憶體;而 init 則隨著每個類別 (Class) 的不同,可能有各式各樣的初始設定。例如 NSString 就有10種初始方式。

NSString *str = [[NSString alloc] initWithString:@"hello"];
NSString *str = [[NSString alloc] initWithFormat:@"hello %@", @"world!"];
NSString *str = [[NSString alloc] initWithData:rawData encoding:NSUTF8StringEncoding];

Foundation Framework

基礎中的基礎,我們絕大多數用到的基本類別都在這兒。這裡例出最常用的部分,簡單做個介紹,有個概念即可,往後用到的機會很多 (笑)

  • NSObject – 所有物件的 base Class,任何新增的類別都要繼承它。
  • NSString – 廣泛使用的字串類別,Unicode,字串一但建立就不可以修改。
  • NSMutableString – 可修改內容的 NSString。
  • NSNumber – 封裝基本型別 (int, float, double, BOOL, etc),讓這些基本型別也可以透過物件來操作。
  • NSValue – 封裝非物件的資料,例如 CGPoint 是由兩個 CGFloat  x, y 組成的 struct,既非物件又代表某個座標的 pair value。
  • NSData – 想成 0 和 1 的 raw data 集成即可。
  • NSDate – 日期和時間。
  • NSArray – 有序的物件陣例,一但建立就不可以新增刪除物件。
  • NSMutableArray – 可新增刪除物件進 array。
  • NSDictionary – Hash Table,同樣也是建立就不可新增 key 和 value。
  • NSMutableArray – 同前,可新增刪除 key 和 value 的 Hash Table。
  • NSSet – 數學上的集合概念,所以物件不能重複,可以對物件做連集、差集等運算。
  • NSMutableSet – 同前,可修改內容版本的 NSSet。

準備好了嗎?Objective-C 我們簡單介紹到此,即將進入介面開發的教學。

iOS 入門教學

About the author

喜愛攝影、自助旅行、一邊宅在家帶小孩一邊創業的 App 設計師。