OC基礎學習-NSString、NSArray和NSDictionary

Corwien發表於2016-07-13

在之前的博文中,我們建立的專案檔案的時候,預設都有引用#import <Foundation/foundation.h> 這個標頭檔案。但是,之前我們對Foundation都沒有展開介紹。這篇博文,我們就揭開它神祕的面紗。

之前,我們有提到過OC使用的是Cocoa框架。那麼Cocoa和Foundation之間,有啥關聯呢?實際上,Cocoa是由許多個不同的框架組成的。最常用的是Foundation和Application Kit。

Foundation框架中有很多有用的、面向資料的簡單類和資料型別。是由許多類,方法,函式,文件按照一定的邏輯組織起來的幾何。資料型別主要如:NSString,NSArray,NSNumber等,將近有100多個類,都可以在Xcode的安裝文件中找到具體的使用方法。

那麼,接下來,我們就對幾個主要的型別的使用進行簡單的例項說明。

一、字串(NSString型別)

格式字元%@可以顯示字串,陣列,字典和集合的全部內容。

1. 字串比較

NSString *thing1 =@“hello 5”;
NSString *thing2 = [NSString stringWithFormat: @"hello %d",5];
if([thing1 isEqualToString: thing2])
{
   NSLog(@"They are the same!");  
}

這裡,我們可以看到。用到了兩個字串的方法,stringWithFormat:是格式化字串輸出。isEqualToString:是判斷兩個字串是否相同。

那麼,isEqualToString和直接用“==”來判斷是否相同,有啥區別呢?

用“==”運算子比較,只能判斷thing1和thing2的指標數值是否相同。而不能判斷是否指向同一個物件。由於thing1和thing2是不同的字串,所有這邊用這個運算子比較的話,會被認為是不同的。

2. 字串的可變性

 在OC中,NSString型別是不可變的,即:一旦被建立,便不能變化。如果要對字串進行改變的話,則在Cocoa中,提供了一個NSString的子類,叫NSMutableString

 NSMutableString *string = [NSMutableString stringWithCapacity:50];
 [string appendString: @"Hello "];
 [string appendFormat: @"NSString %d", 2];

定義用的關鍵字:stringWithCapacity。執行結果等於string被兩次賦值,最後結果是:“Hello NSString 2”。

二、集合型別(NSArray和NSDictionary)

集合型別,就相當於C語言中的陣列。NSArray是一個Cocoa類,用來儲存物件的有序列表。只能存OC物件,而不能存C語言的基本資料型別。同時,也不能直接存nil(物件的NULL值)

1. 建立一個NSArray的格式:

NSArray *array1 = [NSArray arrayWithObjects: @"one", @"two", @"three", nil];

這裡,我們定義的集合有三個元素,最後面的nil並不是一個元素,而是結束的標記符號。這也是為什麼集合型別不能存nil的原因。

只要是個集合,就有count獲取集合中元素的個數,index來獲取指定位置的元素。注意,獲取元素的index值不能大於集合總數count,否則會報錯!

for(NSInteger i=0; i< [array1 count]; i++)
{
    NSLog(@"index %d is %@", i, [array1 objectAtIndex: i]);
}

2.可變集合

  和NSString一樣,NSArray建立也是不可變物件,一旦建立就不能被修改。因此,集合型別也有子型別是可以變的:NSMutableArray

和NSString一樣,定義可變集合也有配套的關鍵字:arrayWithCapacity。

NSMutableArray *array = [NSMutableArray arrayWIthCapacity: 5];
for(NSInteger i=0; i<5; i++)
{
    Tire *tire = [[Tire alloc] init];
    [array addObject: tire];
}

有add的新增方法,當然也有remove的刪除方法。如果,對集合中第二個元素不喜歡,則可以:

[array removeObject: 1]; // 元素索引從0開始。

3.NSDictionary型別

看名字,顧名思義是字典型別,是關鍵字及其定義的集合。

定義字典型別物件的格式:

NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys: t1, @"tire1", t2, @"tire2", t3, @"tire3", nil]; // 也是用nil表示結束

字典型別還有一種建立方法:

NSMutableDictionary *tires = [NSMutableDictionary dictionary];
[tires setObject:t1 forKey:@"tire1"];
[tires setObject:t2 forKey:@"tire2"];
[tires setObject:t3 forKey:@"tire3"];

如果要刪除字典中的元素,可以用:

[tires removeObjectForKey: @"tire1"];

相關部落格:
objective-c基礎教程之Foudation框架介紹
NSString常用方法

相關文章