《Objective-C基礎教程》第8章 Foundation Kit介紹

第8章 Foundation Kit介紹

8.1 Foundation

Foundation AppKit(OS X)和UIKit(IOS)兩個UI框架的基礎,包含很多有用的、面向對象的簡單類和數據類型,可在IOS和OS X應用程序中兼容。

8.3 一些有用的數據類型

8.3.1 NSRange

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

8.3.2 幾何數據類型

由Core Graphics(C)框架提供,用於進行2D渲染,帶CG前綴,如CGPoint、CGSize、CGRect,用C結構體以提升性能。

8.4 字符串

8.4.1 創建字符串

最常用的莫過於直接把一個常量字符串付給一個變量,比如 :NSString * tmp = @”Hello, World!!” ;

其次是使用類方法 +(id) stringWithFormat:(NSString *) format,⋯;

比如:

int  h = 178;
NSString * height = [NSString stringWithFormat:@"Your height is %d cm",h ]

8.4.2 獲取字符串的長度

​ - (unsigned int)length;

8.4.3 字符串比較

A: - (BOOL)isEqualToString:(NSString *)aString

兩個字符串相同返回YES,不同返回NO。

B:- (NSComparisonResult)compare:(NSString *)aString

​ 其中NSComparisonResult定義如下:

typedef  enum _NSComparisonResult {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
    }NSComparisonResult;

​ 這個比價反映了兩個字符串的大小關係,比如 [@”aardvark” compare:@”zygote”]將返回NSOrderedAscending。

C:不區分大小寫的比較:compare:options:

options是一個位掩碼,常用選項如下:

NSCaseInsensitiveSearch, 不區分大小寫。
NSLiteralSearch, 進行完全比較,區分大小寫。
NSNumericSearch.比較字符串的字符個數,而不是字符值。

​ 不區分大小寫比較也可以用函數 - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString。

D:字符串中是否有別的字符串,字符串查找

- (BOOL)hasPrefix:(NSString *)aString  是否以一個字符串開頭
- (BOOL)hasSuffix:(NSString *)aString  是否以一個字符串結尾。
- (NSRange)rangeOfString:(NSString *)aString 查找一個字符串的起始位置。如果沒找到返回{NSNotFound,0

8.4.4 從一個字符串獲取子字符串

- (NSString *)substringFromIndex:(NSUInteger)anIndex 從指定位置開始到字符串結束
- (NSString *)substringToIndex:(NSUInteger)anIndex       從字符串開始第一個到指定位置。
- (NSString *)substringWithRange:(NSRange)aRange    取一個字符串中間的一部分。

8.4.5 字符串連接

- (NSString *)stringByAppendingString:(NSString *)aString
- (NSString *)stringByAppendingFormat:(NSString *)format

8.4.6 可變字符串

NSString是不可變的,意味着一旦創建好,就不能再改變,不能對它刪除或者重置。

Cocoa 提供了NSString的子類NSMutableString,可以實現可變字符串。NSMutableString常見方法。

+ (id)stringWithCapacity:(NSUInteger)capacity  創建一個字符串並指定最大長度。
- (void)appendString:(NSString *)aString  追加字符
- (void)appendFormat:(NSString *)format  按格式追加字符
- (void)deleteCharactersInRange:(NSRange)aRange  刪除指定位置的字符。
- (void)insertString:(NSString *)aString atIndex(NSUInteger)anIndex   在指定位置插入字符
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString替換指定位置的字符
- (void)setString:(NSString *)aString    重置字符串。

8.5 集合大家族

8.5.1 NSArray

NSArray只能存儲Objective-C的對象,原始的C語言對象如int、float等以及nil(對象的零值或NULL值)不能存儲。

+ (id)arrayWithObjects:(id)firstObj, ... 創建NSArray
- (NSUInteger)count 獲取對象個數
- (id)objectAtIndex:(NSUInteger)index   通過索引獲取數組中的一個對象
示例
NSArray * array = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
NSString * tmp = [array objectAtIndex:2];
//遍歷數組
for (NSString * string in array) {
       NSLog(@"array:%@",string);
}
切分數組
NSString *tempString = [mutableArray componentsJoinedByString:@","];將array數組轉換爲string字符串
NSArray  *array = [str componentsSeparatedByString:@","];將string字符串轉換爲array數組

8.5.2 NSMutableArray

跟NSString和NSMutableString的關係一樣,如果需要對數組的值進行刪除或者重置操作,需要用到可變數組 NSMutableArray。

+ (id)arrayWithCapacity:(NSUInteger)numItems  創建一個指定初始化長度的數組。
- (void)addObject:(id)anObject 添加一個元素。
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index  在指定位置添加一個元素。
- (void)removeObjectAtIndex:(NSUInteger)index  刪除一個數組元素

創建數組指定的參數並不是說數組的最大容量,系統只是根據這個值來預分配一個初始的內存大小,添加更多的元素也是允許的。

8.5.3 NSEnumerator

表示集合中迭代出的對象。支持Mac OS X10.4或更早的系統。

- (NSEnumerator *)objectEnumerator; 創建枚舉器
- (id) nextObject; 獲取下一個對象,返回nil時循環結束
//通過枚舉器來遍歷數組
NSEnumerator *arrayEnum = [_array objectEnumerator];
id object = nil;
//枚舉器是通過nextobject來獲取到對應的對象,如果沒有得到對象,則返回nil,while條件不成立,則結束。
while (object = [arrayEnum nextObject]) {
    NSLog(@"%@",object);
}

//獲取數組的逆序枚舉器
NSEnumerator *reverseArrayEnum = [_array reverseObjectEnumerator];
while (object = [reverseArrayEnum nextObject]) {
    NSLog(@"%@",object);
}

8.5.4 快速枚舉

性能更快

for (NSString * string in array) {
       NSLog(@"array:%@",string);
}

8.5.5 代碼塊枚舉

併發執行

[array enumerateObjectsUsingBlock:^(NSString* obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"%@",obj);
}];

8.5.6 NSDictionary

+ (id)dictionaryWithObjectsAndKeys:... 創建一個字典。
- (id)objectForKey:(id)aKey 獲取相應關鍵字的值。

NSMutableDictionary

+ (id)dictionaryWithCapacity: (NSInteger)numItems 創建一個字典
- (void)setObject:(id) anObject forKey:(id)aKey   增加一個元素,若該key存在,則替換
- (void)removeObjectForKey: (id)aKey刪除一個元素。

8.6 其他數值

集合只能存儲Objective-C對象,不能直接存儲基本類型的數據,需要對其進行封裝。

8.6.1 NSNumber

封裝基本數據類型(也可以使用字面量語法)

+ numberWithChar:
+ numberWithFloat:
+ numberWithInt:
+ numberWithBool:

對應的獲得方法

– charValue
– floatValue
– intValue
– boolValue
- stringValue

8.6.2 NSValue

封裝任意值

+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type

傳遞的第一個參數是你想要包裝數值的地址。第二個參數是描述這個數據類型的字符串,使用@encode指令接受類型名稱生成字符串。

- (void)getValue:(void *)buffer;

示例

NSValue *value = [NSValue valueWithBytes:&result objCType:@encode(int)];
[value getValue:&result];

8.6.3 NSNull

nil在集合中表示結束,所以用NSNull表示集合元素爲空

+ (NSNull *)null;
[profile setObject:[NSNull null] forKey:@"phoneNumber"];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章