iOS Foundation架構 -2.常用集合類簡單總結

來源:互聯網
上載者:User

Foundation架構中常用的類有:NSString、NSArray、NSSet、NSDictionary 以及它們對應的子類 NSMutableString、NSMutableArray、NSMutableSet、NSMutableDictionary,父類統一為不可變而子類可變,還包括NSDate、NSObject 可變和不可變的區別是對象內容的可變和不可變,子類既然是繼承父類那麼子類可以使用父類中的任意方法 1.NSString類的操作 使用NSString類的對象初始化方法建立字串    複製代碼  // 建立無參數的字串    NSString *str2 = [[NSString alloc] initWithString:@"Jack"];        // 建立帶參數的字串    NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d",10];        // C字串 轉換為 OC字串    NSString *str4 = [[NSString alloc] initWithUTF8String:"Rose"];        // OC字串 轉換為 C字串    const char c = [str4 UTF8String];        // 讀取檔案內容第一種方式:讀取案頭下 getWeather.xml 檔案裡的所有內容    NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/getWeather.xml"                      encoding:NSUTF8StringEncoding error:nil];     // NSUTF8StringEncoding 適用於使用中文的編碼格式        // 讀取檔案內容第二種方式        // URL:資源路徑 格式為:協議頭:// 比如本地檔案的URL格式:file://     網路檔案的URL格式:http://    伺服器檔案的URL格式:ftp://      NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/getWeather.xml"];   // 如果訪問網路就可以定義:http://www.baidu.com     NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];        NSLog(@"/n%@",str6);複製代碼使用NSString類方法建立字串複製代碼    // 建立無參數的字串    NSString *str2 = [NSString stringWithString:@"Jack"];        // 建立帶參數的字串    NSString *str3 = [NSString stringWithFormat:@"age is %d",10];        // C字串 轉換為 OC字串    NSString *str4 = [NSString stringWithUTF8String:"Rose"];        // 讀取檔案內容第一種方式:讀取案頭下getWeather.xml檔案裡的所有內容    NSString *str5 = [NSString stringWithContentsOfFile:@"file:///Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil];     // NSUTF8StringEncoding 適用於使用中文的編碼格式        // 讀取檔案內容第二種方式:讀取案頭下getWeather.xml檔案裡的所有內容    NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/getWeather.xml"];    NSString *str6 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];複製代碼  可以看出實現同一個功能NSString提供了對象方法和類方法兩種解決方式而類方法快捷方便,因此在實際開發中推薦使用類方法來操作字串   將字串寫入到一個檔案裡複製代碼    // 給目標檔案中寫入字串,兩種寫入方式在寫入之前都會將檔案中的內容全部清空後再寫入        // 第一種寫入方式    // atomically參數指寫入不成功時要不要停止    [@"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類的操作 NSMutableString繼承自NSString那麼NSMutableString可以使用NSString類中的任意方法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字串後面進行拼接    NSLog(@"%@",mutalbeStr); // 列印:My age is 10 11 12    // 可以看出:NSString一旦定義了str字串它本身就不可變了,雖然NSString類方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一個新的字串。而NSMutableString提供的拼接方法appendString方法是在原有的字串上直接拼接它沒有傳回值。這就是可變和不可變字串的本質 複製代碼    // NSMutableString 提供了刪除方法,比如說要刪掉上面可變字串中的11有兩種方式:        // 第一種 必須要清楚要刪除內容的location和length,11在整個字串中的loc = 11 length = 2  (不推薦使用)    //[mutalbeStr deleteCharactersInRange:NSMakeRange(13, 2)];        // 第二種:先擷取要刪除內容的範圍,然後刪除範圍內的字串    NSRange range = [mutalbeStr rangeOfString:@"11"];    [mutalbeStr deleteCharactersInRange:range];        NSLog(@"%@",mutalbeStr); // 列印:My age is 10  12複製代碼複製代碼  2.OC集合類的操作 (1) OC集合類包括NSArray,NSSet,NSDictionary都是以物件導向的方式運算元組,而且OC數組不像C語言中的數組只能存放同一種資料類型,它可以    存放任意類型的對象,但是不能存放非OC物件類型如基礎資料型別 (Elementary Data Type)int,struct,enum等 (2) OC數組是以對象的方式存在,因此在建立的時候需要為建立的對象前面加* (3) NSArray數組一旦建立就決定了是不是可變,而且永遠是可變或不可變 (4) NSArray數組和子類NSMutableArray的基本操作     // 使用NSArray的類方法arry建立個數組    // 建立時定義為空白數組,那麼array數組將永遠是空數組    NSArray *array = [NSArray array]; NSArray的常見操作:複製代碼    // 建立數組對象有兩種方式     // 第一種方式:    NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];    // 數組中包含了兩個NSString對象 nil是用來標識數組元素結束的標識    // 因此OC數組中不能存放Null 物件    NSArray *array1 = [NSArray arrayWithObjects:@"Jack",@"Rose", nil];     // 第二種方式:(推薦使用)    NSArray *array2 = @[@"Jack",@"Rose"];     // 擷取數組的長度 array1.count;    NSUInteger count = [array1 count];    NSLog(@"%ld",count);    // 訪問數組中的對象的兩種方式    NSString *str1 = [array1 objectAtIndex:0]; // 數組中索引為1的對象,OC中提供的方法 返回:Jack    NSString *str2 = array1[0];                // 編譯器特性其實還是轉為上面的形式來訪問 返回:Jack複製代碼    // 遍曆數組的三種方式    // 第一種:    for (int i = 0; i<array1.count; i++) {        NSLog(@"%@",array1[i]); // 數組中存放的是對象可以用%@輸出        if (i ==0) {            break;        }    }         // 第二種:將array1數組中的每個對象拿出來賦給obj然後依次列印    for (id obj in array1) {    // id obj 代表數組中的對象        // 擷取obj對象在數組中的索引        NSUInteger index = [array1 indexOfObject:obj];        NSLog(@"%ld-->%@",index,obj);    }         // 第三種:使用Block 每次從數組中遍曆一個元素後就傳遞給block,block也相應的執行一次    // block中的id obj對應數組中的元素,NSUInteger idx對應數組中元素的索引 BOOL用來停止遍曆    [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {                NSLog(@"%ld-->%@",idx,obj);                // 如果索引為0 立即停止遍曆        if (idx ==0) {            *stop = YES;        }    }];複製代碼複製代碼 NSMutableArray的基本操作:複製代碼  // 建立可變數組    NSMutableArray *mutableArray = [NSMutableArray array];      // NSMutableArray *mutalbeArray2 = @[@"張三",@"李斯"];  注意:@[]返回的是不可變NSArray數組 這樣會報錯  // 為可變數組增加任意對象    Person *person = [[Person alloc] init];        [mutableArray addObject:person];    [mutableArray addObject:@"Jack"];    [mutableArray addObject:@"John"];    // [mutableArray addObject:10]; 數組中不可以存放基礎資料型別 (Elementary Data Type)    // 從數組中刪除指定的元素    [mutableArray removeObject:@"John"];    [mutableArray removeObjectAtIndex:0];    // 將數組中的元素全部刪除    [mutableArray removeAllObjects];複製代碼(5) NSSet數組和子類NSMutableSet的基本操作 NSSet和NSArray都是不可變數組,一旦建立就無法改變。NSSet是無序的集合簡單操作:複製代碼    // 建立NSSet集合    NSSet *set = [NSSet set]; // 一旦建立為空白永遠為空白    NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];        // 隨機擷取NSSet集合中的元素    NSString *str = [set2 anyObject];    NSLog(@"%@",str);複製代碼NSMutableSet的簡單操作:複製代碼    // 建立可變set集合    NSMutableSet *mutableSet = [NSMutableSet set];        // 為set添加集合    [mutableSet addObject:@"Jack"];    [mutableSet addObject:@"Rose"];        // 刪除元素    [mutableSet removeObject:@"Jack"];複製代碼  (6) NSArray和NSSet數組的對比 都是可以存放任意類型的OC對象的集合,都不能存放基礎資料型別 (Elementary Data Type)本身都是不可變的,但是子類都是可變的NSArray是有序的集合,NSSet是無序的集合(7) NSDictionary和NSMutableDictionary NSDictionary和它的子類NSMutableDictionary都是以key/value的形式存在,NSDictionary本身為不可變集合NSDictionary也是無序集合字典集合中儲存的值是以索引值對的形式存在,如果存在相同的key那麼後面key的值會被覆蓋。但是允許vaule的重複NSDictionary的基本操作複製代碼複製代碼    // 常見建立Dictionary集合的四種方式        // 1.建立一個空的字典集合類型    NSDictionary *dic = [NSDictionary dictionary]; // 一旦為空白 永久為空白        // 2.建立只有一組值的字典集合    NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];        // 3.建立多個值的字典集合    NSArray *keys = @[@"name",@"address",@"e-mail"];    NSArray *values = @[@"Jack",@"北京",@"jack@163.com"];    NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];        // 4.通過值/鍵的方式來建立    NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:                          @"Jack",@"name",                          @"北京",@"address",                          @"jack@163.com",@"e-mail",nil];        // 5.類似於數組的建立方式 (推薦使用)    NSDictionary *dic5 = @{@"name":@"Jack",                           @"address":@"北京",                           @"e-mail":@"jack@163.com"};複製代碼    // 取值:根據相應的Key取出對應的值    NSString *name = [dic1 objectForKey:@"name"]; // 返回 Jack    // 返回索引值對的個數    NSUInteger count = dic5.count; // 返回 4複製代碼    // 遍曆NSDictionary數組用兩種方式:    // 第一種方式:    // 擷取字典中所有的鍵    NSArray *allKeys = [dic5 allKeys]; // 擷取的鍵在數組中是無序的        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;    }];複製代碼複製代碼  NSMutableDictionary的基本操作複製代碼    // 建立可變字典    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];    // NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 錯誤的寫法因為右邊返回的是不可變的字典    // 為可變字典添加元素    [mutableDic setObject:@"Rose" forKey:@"name"];    [mutableDic setObject:@"北京" forKey:@"address"];    // 移除    [mutableDic removeAllObjects];    [mutableDic removeObjectForKey:@"name"];    // 列印    NSLog(@"%@",mutableDic); // 輸出:address = "\U5317\U4eac"; name = Rose;     \U5317\U4eac 就是北京儲存的形式複製代碼  (8) 設計一個通訊錄裡麵包含了四個人的姓名、電話、地址 複製代碼    NSArray *friends = @[         @{@"name":@"張三",@"phone":@"13993214321",@"address":@"北京"},         @{@"name":@"李斯",@"phone":@"13498766789",@"address":@"上海"},         @{@"name":@"王武",@"phone":@"15898766789",@"address":@"天津"},         @{@"name":@"趙柳",@"phone":@"18798766789",@"address":@"南京"}];        // 擷取‘李斯’的通訊錄資訊    NSDictionary *dic = friends[1];    NSLog(@"%@",dic);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.