Foundation框架中常用的類有:NSString、NSArray、NSSet、NSDictionary 以及它們對應(yīng)的子類 NSMutableString、NSMutableArray、NSMutableSet、NSMutableDictionary,父類統(tǒng)一為不可變而子類可變,還包括NSDate、NSObject
可變和不可變的區(qū)別是對象內(nèi)容的可變和不可變,子類既然是繼承父類那么子類可以使用父類中的任意方法
1.NSString類的操作
// 創(chuàng)建無參數(shù)的字符串
NSString *str2 = [[NSString alloc] initWithString:@"Jack"]; // 創(chuàng)建帶參數(shù)的字符串 NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d",10]; // C字符串 轉(zhuǎn)換為 OC字符串 NSString *str4 = [[NSString alloc] initWithUTF8String:"Rose"]; // OC字符串 轉(zhuǎn)換為 C字符串 const char c = [str4 UTF8String]; // 讀取文件內(nèi)容第一種方式:讀取桌面下 getWeather.xml 文件里的所有內(nèi)容 NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/getWeather.xml"
encoding:NSUTF8StringEncoding error:nil]; // NSUTF8StringEncoding 適用于使用中文的編碼格式 // 讀取文件內(nèi)容第二種方式 // URL:資源路徑 格式為:協(xié)議頭:// 比如本地文件的URL格式:file:// 網(wǎng)絡(luò)文件的URL格式:http:// 服務(wù)器文件的URL格式:ftp://
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/getWeather.xml"];
// 如果訪問網(wǎng)絡(luò)就可以定義:http://www.baidu.com
NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"/n%@",str6);
// 創(chuàng)建無參數(shù)的字符串 NSString *str2 = [NSString stringWithString:@"Jack"]; // 創(chuàng)建帶參數(shù)的字符串 NSString *str3 = [NSString stringWithFormat:@"age is %d",10]; // C字符串 轉(zhuǎn)換為 OC字符串 NSString *str4 = [NSString stringWithUTF8String:"Rose"]; // 讀取文件內(nèi)容第一種方式:讀取桌面下getWeather.xml文件里的所有內(nèi)容 NSString *str5 = [NSString stringWithContentsOfFile:@"file:///Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil]; // NSUTF8StringEncoding 適用于使用中文的編碼格式 // 讀取文件內(nèi)容第二種方式:讀取桌面下getWeather.xml文件里的所有內(nèi)容 NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/getWeather.xml"]; NSString *str6 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
可以看出實(shí)現(xiàn)同一個功能NSString提供了對象方法和類方法兩種解決方式而類方法快捷方便,因此在實(shí)際開發(fā)中推薦使用類方法來操作字符串
// 給目標(biāo)文件中寫入字符串,兩種寫入方式在寫入之前都會將文件中的內(nèi)容全部清空后再寫入 // 第一種寫入方式 // atomically參數(shù)指寫入不成功時要不要停止 [@"java,iOS" writeToFile:@"/Users/apple/Desktop/getWeather.xml" atomically:YES encoding:NSUTF8StringEncoding error:nil]; // 第二種寫入方式 NSString *content = @"iOS,Java"; // NSURL提供了直接定義本地URL的類方法 NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/getWeather.xml"]; [content writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
2.NSMutableString類的操作
NSString *str = [NSString stringWithFormat:@"My age is 10 "]; NSString *str2 = [str stringByAppendingString:@"11 12"]; NSLog(@"%@",str2); // 打印:My age is 10 11 12 NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "]; [mutalbeStr appendString:@"11 12"]; // appendString方法沒有返回值,說明是直接str字符串后面進(jìn)行拼接 NSLog(@"%@",mutalbeStr); // 打印:My age is 10 11 12
// 可以看出:NSString一旦定義了str字符串它本身就不可變了,雖然NSString類方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一個新的字符串。而NSMutableString提供的拼接方法appendString方法是在原有的字符串上直接拼接它沒有返回值。這就是可變和不可變字符串的本質(zhì)
// NSMutableString 提供了刪除方法,比如說要刪掉上面可變字符串中的11有兩種方式: // 第一種 必須要清楚要刪除內(nèi)容的location和length,11在整個字符串中的loc = 11 length = 2 (不推薦使用) //[mutalbeStr deleteCharactersInRange:NSMakeRange(13, 2)]; // 第二種:先獲取要刪除內(nèi)容的范圍,然后刪除范圍內(nèi)的字符串 NSRange range = [mutalbeStr rangeOfString:@"11"]; [mutalbeStr deleteCharactersInRange:range]; NSLog(@"%@",mutalbeStr); // 打印:My age is 10 12
2.OC集合類的操作
(1) OC集合類包括NSArray,NSSet,NSDictionary都是以面向?qū)ο蟮姆绞?/span>操作數(shù)組,而且OC數(shù)組不像C語言中的數(shù)組只能存放同一種數(shù)據(jù)類型,它可以 存放任意類型的對象,但是不能存放非OC對象類型如基本數(shù)據(jù)類型int,struct,enum等
(2) OC數(shù)組是以對象的方式存在,因此在創(chuàng)建的時候需要為創(chuàng)建的對象前面加*
(3) NSArray數(shù)組一旦創(chuàng)建就決定了是不是可變,而且永遠(yuǎn)是可變或不可變
(4) NSArray數(shù)組和子類NSMutableArray的基本操作
// 使用NSArray的類方法arry創(chuàng)建個數(shù)組 // 創(chuàng)建時定義為空數(shù)組,那么array數(shù)組將永遠(yuǎn)是空數(shù)組 NSArray *array = [NSArray array];
// 創(chuàng)建數(shù)組對象有兩種方式 // 第一種方式: NSArray *array = [NSArray arrayWithObjects:@"Jack",nil]; // 數(shù)組中包含了兩個NSString對象 nil是用來標(biāo)識數(shù)組元素結(jié)束的標(biāo)識 // 因此OC數(shù)組中不能存放空對象 NSArray *array1 = [NSArray arrayWithObjects:@"Jack",@"Rose", nil]; // 第二種方式:(推薦使用) NSArray *array2 = @[@"Jack",@"Rose"];
// 獲取數(shù)組的長度 array1.count; NSUInteger count = [array1 count]; NSLog(@"%ld",count);
// 訪問數(shù)組中的對象的兩種方式 NSString *str1 = [array1 objectAtIndex:0]; // 數(shù)組中索引為1的對象,OC中提供的方法 返回:Jack NSString *str2 = array1[0]; // 編譯器特性其實(shí)還是轉(zhuǎn)為上面的形式來訪問 返回:Jack
// 遍歷數(shù)組的三種方式 // 第一種: for (int i = 0; i<array1.count; i++) { NSLog(@"%@",array1[i]); // 數(shù)組中存放的是對象可以用%@輸出 if (i ==0) { break; } }
// 第二種:將array1數(shù)組中的每個對象拿出來賦給obj然后依次打印 for (id obj in array1) { // id obj 代表數(shù)組中的對象 // 獲取obj對象在數(shù)組中的索引 NSUInteger index = [array1 indexOfObject:obj]; NSLog(@"%ld-->%@",index,obj); }
// 第三種:使用Block 每次從數(shù)組中遍歷一個元素后就傳遞給block,block也相應(yīng)的執(zhí)行一次 // block中的id obj對應(yīng)數(shù)組中的元素,NSUInteger idx對應(yīng)數(shù)組中元素的索引 BOOL用來停止遍歷 [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%ld-->%@",idx,obj); // 如果索引為0 立即停止遍歷 if (idx ==0) { *stop = YES; } }];
// 創(chuàng)建可變數(shù)組
NSMutableArray *mutableArray = [NSMutableArray array];
// NSMutableArray *mutalbeArray2 = @[@"張三",@"李斯"]; 注意:@[]返回的是不可變NSArray數(shù)組 這樣會報錯
// 為可變數(shù)組增加任意對象
Person *person = [[Person alloc] init]; [mutableArray addObject:person]; [mutableArray addObject:@"Jack"]; [mutableArray addObject:@"John"]; // [mutableArray addObject:10]; 數(shù)組中不可以存放基本數(shù)據(jù)類型
// 從數(shù)組中刪除指定的元素 [mutableArray removeObject:@"John"]; [mutableArray removeObjectAtIndex:0]; // 將數(shù)組中的元素全部刪除 [mutableArray removeAllObjects];
(5) NSSet數(shù)組和子類NSMutableSet的基本操作
// 創(chuàng)建NSSet集合 NSSet *set = [NSSet set]; // 一旦創(chuàng)建為空永遠(yuǎn)為空 NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil]; // 隨機(jī)獲取NSSet集合中的元素 NSString *str = [set2 anyObject]; NSLog(@"%@",str);
// 創(chuàng)建可變set集合 NSMutableSet *mutableSet = [NSMutableSet set]; // 為set添加集合 [mutableSet addObject:@"Jack"]; [mutableSet addObject:@"Rose"]; // 刪除元素 [mutableSet removeObject:@"Jack"];
(6) NSArray和NSSet數(shù)組的對比
(7) NSDictionary和NSMutableDictionary
// 常見創(chuàng)建Dictionary集合的四種方式 // 1.創(chuàng)建一個空的字典集合類型 NSDictionary *dic = [NSDictionary dictionary]; // 一旦為空 永久為空 // 2.創(chuàng)建只有一組值的字典集合 NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"]; // 3.創(chuàng)建多個值的字典集合 NSArray *keys = @[@"name",@"address",@"e-mail"]; NSArray *values = @[@"Jack",@"北京",@"jack@163.com"]; NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys]; // 4.通過值/鍵的方式來創(chuàng)建 NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys: @"Jack",@"name", @"北京",@"address", @"jack@163.com",@"e-mail",nil]; // 5.類似于數(shù)組的創(chuàng)建方式 (推薦使用) NSDictionary *dic5 = @{@"name":@"Jack", @"address":@"北京", @"e-mail":@"jack@163.com"};
// 取值:根據(jù)相應(yīng)的Key取出對應(yīng)的值 NSString *name = [dic1 objectForKey:@"name"]; // 返回 Jack
// 返回鍵值對的個數(shù) NSUInteger count = dic5.count; // 返回 4
// 遍歷NSDictionary數(shù)組用兩種方式: // 第一種方式: // 獲取字典中所有的鍵 NSArray *allKeys = [dic5 allKeys]; // 獲取的鍵在數(shù)組中是無序的 for (int i = 0; i < dic5.count; i++) { NSString *key = allKeys[i]; NSString *value = dic5[key]; NSLog(@"%@-->%@",key,value); } // 第二種方式:將字典中的鍵值對傳遞給Block中的key和obj [dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@-->%@",key,obj);
// 遍歷一次立即停止 *stop = YES; }];
// 創(chuàng)建可變字典 NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary]; // NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 錯誤的寫法因?yàn)橛疫叿祷氐氖遣豢勺兊淖值?/span>
// 為可變字典添加元素 [mutableDic setObject:@"Rose" forKey:@"name"]; [mutableDic setObject:@"北京" forKey:@"address"];
// 移除 [mutableDic removeAllObjects]; [mutableDic removeObjectForKey:@"name"];
// 打印 NSLog(@"%@",mutableDic); // 輸出:address = "/U5317/U4eac"; name = Rose; /U5317/U4eac 就是北京存儲的形式
(8) 設(shè)計一個通訊錄里面包含了四個人的姓名、電話、地址
NSArray *friends = @[ @{@"name":@"張三",@"phone":@"13993214321",@"address":@"北京"}, @{@"name":@"李斯",@"phone":@"13498766789",@"address":@"上海"}, @{@"name":@"王武",@"phone":@"15898766789",@"address":@"天津"}, @{@"name":@"趙柳",@"phone":@"18798766789",@"address":@"南京"}]; // 獲取‘李斯’的通訊錄信息 NSDictionary *dic = friends[1]; NSLog(@"%@",dic);
新聞熱點(diǎn)
疑難解答