新手一枚,在學習過程中,整理自己的筆記,與各位新手大大一起分享,一起進步(PS:其實是怕自己會忘記,又苦於沒有錢買筆記本,哈哈),如有錯誤,望大家提出,我一定最快修改,這僅僅是小生的自我理解,並不想誤人子弟,不喜勿噴. 首先,整理一下在OC基礎中會接觸到的類: NSString,NSMutableS ...
新手一枚,在學習過程中,整理自己的筆記,與各位新手大大一起分享,一起進步(PS:其實是怕自己會忘記,又苦於沒有錢買筆記本,哈哈),如有錯誤,望大家提出,我一定最快修改,這僅僅是小生的自我理解,並不想誤人子弟,不喜勿噴.
首先,整理一下在OC基礎中會接觸到的類:
NSString,NSMutableString
NSArray,NSMutableArray
NSDictionary,NSMutableDictionary 以上3組類都是經常會用到的,使用頻率非常高,然後就是自定義類等等
還有一些比如NSData,NSDate,NSFileHandle這些類,用的一般不是很多
1.NSString和NSMutableString
NSString:
//1)最基本的方式 NSString *str = @"abc"; //常量區 //2) 類方法創建字元串 NSString *str2 = [NSString stringWithFormat:@"xxx"]; //堆區 //3)使用對象方法,來創建字元串 NSString *str3 = [[NSString alloc]initWithString:@"abc"];//常量區 //4) 把字元串寫入到到文件中 NSString *str4 = @"每當我錯過一個女孩,我就向山上放一塊磚,於是這個世界就有了長城!";NSMutableString的用法同理:
//可變字元串的操作: //+(instancestype)string{ return [[[NSMutableString alloc] init] autorelease];} NSMutableString *str = [NSMutableString string]; // 1)添加內容到字元串中 // i, appendString [str appendStbaring:@"hello"]; // ii, 格式化的插入 int a = 10; [str appendFormat:@" a = %d",a]; // iii.在指定位置處插入字元串 [str insertString:@"abc" atIndex:2]; // 2)從字元串中刪除內容 // 刪除指定範圍的 字元串 //heabcllo a = 10 [str deleteCharactersInRange:NSMakeRange(2, 3)]; // 3)替換字元串中的內容 //hello a = 10 //hesss a = 10 //當給定的內容大於 我們指定的範圍的時候 ,這個時候,以給定的內容為準 [str replaceCharactersInRange:NSMakeRange(2, 3) withString:@"sssxxxx"]; // 4)查找子字元串 () NSRange r1 = [str rangeOfString:@"ss"]; NSLog(@"%@",NSStringFromRange(r1)); NSLog(@"str : %@",str); //str:hesssxxxx a = 10 // 重要: // 1)NSMutableString 容易犯的錯誤 // NSMutableString NSString NSMutableString *str2 = @"abc"; // 運行的時候,str2 ----> NSString //編譯的時候不會報錯,因為str2 是NSMutableString 類型的 //運行時,會報錯 // str2 變成了NSString 類型的了 // NSString 是不可變的,沒有appendString 方法 [str2 appendString:@"xxxx"]; // 2)NSMutableString 有一個string的屬性,它可以吧字元串內容給覆蓋掉 str.string = @"abc"; //str = abc NSLog(@"str : %@",str);
NSString 不可變:指的是字元串在記憶體中占用的存儲空間固定,並且存儲的內容不能發生變化 NSMutableString 可變:指的是字元串在記憶體中占用的存儲空間可以不固定,並且存儲的內容可以被修改
兩者的區別:NSString是不可變的, 裡面的文字內容是不能進行修改的,NSMutableString是可變的, 裡面的文字內容可以隨時更改
2.NSArray和NSMutableArray
NSArray是OC中的數組類, 開發中建議儘量使用NSArray替代C語言中的數組 C語言中數組的弊端 int array[4] = {10, 89, 27, 76}; 只能存放一種類型的數據.(類型必須一致) 不能很方便地動態添加數組元素、不能很方便地動態刪除數組元素(長度固定)// 1) 使用類方法創建 NSArray *arr = [NSArray array]; //空數組 沒有意義 // 2) 創建數組,有一個元素 (元素的類型必須是一個OC的對象) NSArray *arr1 = [NSArray arrayWithObject:@"abc"]; // 3) 創建數組,有多個元素 NSArray *arr2 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil]; // 4) 可以用一個已經存在的數組,創建一個新的數組 NSArray *arr3 = [NSArray arrayWithArray:arr2]; // 5) 快速創建 NSArray *arr4 = @[@"one",@"two",@"three",@"1",@1]; // 使用對象方法創建數組 // nil用來標誌數組已經結束了 // 怎麼樣才能存儲一個null // [NSNull null]; //列印時是 "<null>" NSArray *arr5 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",[NSNull null],@"5", nil]; // 查看數組的內容 // 當我們以 %@ 的格式,列印 數組 ,此時得到的是一個(數組元素,數組元素2) NSLog(@"%@",arr5); //NSArray沒有addObject這個方法 NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"hehe",@"lala",@"haha", nil]; //給可變數組arrayM添加一個hehe1對象 [arrayM addObject:@"hehe1"]; NSLog(@"%@\n%@",arr2,arrayM);
NSLog列印結果:
2016-04-27 12:44:05.986 3.14[10393:372743] ( one, two, three ) ( hehe, lala, haha, hehe1 )
NSArray和NSMutableArray的區別:NSArray是不可變的,一旦初始化完成,其內容是固定的,永遠不能修改,也不能刪除裡面的元素.
3.NSDictionary和NSMutableDictionary
NSDictionary
//創建 對象 // 1) 類方法 NSDictionary *dict = [NSDictionary dictionary]; //空字典,不可變,沒有意義 // value key NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"]; // 創建多組元素 NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil]; // 2) 對象方法 NSDictionary *dict4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1", nil]; // 註意: 1) 不管是key 還是 value 註意都必須是對象類型(不能是基本數據類型) // 2) key的值是不能夠重覆的,如果鍵值重覆,則後面的不能再添加了 // 3) 集合元素是無需的 // 4) 可以通過key值來快速的獲取value的值 // NSLog 以 %@的形式輸出 字典,得到的是 {鍵值對} NSLog(@"dict = %@",dict3); //快速創建字典 (常用) NSDictionary *dict5 = @{@"k1":@"v1",@"k2":@"v2",@"k3":@"v3",@"k1":@"v8"}; NSLog(@"dict5 = %@",dict5); //訪問 // 1) 獲取字典的長度 NSLog(@"%ld",dict5.count); // 2) 根據key值,獲取value值 NSString *str2 = [dict5 objectForKey:@"k2"]; //NSLog(@"str2 = %@",str2); //遍歷 // 1) 快速枚舉的方式 for (id obj in dict5) { // 此時遍歷的過程中,得到的obj 都是key //[dict5 objectForKey:obj]根據key獲取value值 NSLog(@"key = %@, value = %@",obj,[dict5 objectForKey:obj]); } // 2)使用block的方式 [dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if([key isEqualToString:@"k2"]){ *stop = YES; //遍歷停止 }else{ NSLog(@"key= %@,value = %@",key,obj); } }]; //字典的遍歷不一定是有序的 //檢查字典中是否包含指定的key值 // 獲取所有的key NSArray *keys = [dict5 allKeys]; NSLog(@"key = %@",keys); if([keys containsObject:@"k1"]){ NSLog(@"存在"); }
NSDictionary沒有增\刪\改\查,因為是不可變的,它只能獲取,遍歷.
NSMutableDictionary:
//1) 創建 字典 // 類方法 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"zhaosi" forKey:@"zs"]; // 對象方法 NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"v1",@"k1",@"v2",@2, nil]; //快速創建 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict.dictionary = @{@"name":@"bob",@"age":@"18"}; //添加值到字典中 [dict setObject:@"man" forKey:@"sex"]; NSLog(@"%@",dict); //2) 操作字典 增刪改查 [dict setObject:@"v1" forKey:@"k1"]; [dict setObject:@"v2" forKey:@"k2"]; [dict setObject:@"v3" forKey:@"k3"]; //刪除元素 [dict removeObjectForKey:@"k1"]; [dict removeAllObjects]; //修改元素 [dict2 setObject:@"zhangsan" forKey:@"zs"]; //簡寫形式 dict2[@"zs"]=@"zhaosi"; dict2[@2]= @"vvvvvv2"; //3) 註意 NSLog(@"dict = %@",dict2);
NSMutableDictionary 可以做到增\刪\改\查,這是與NSDictionary的區別
以上三組類,大致的區別是一樣的,都是可變與不可變之分,後期會講到setter(設置)和getter(獲取)跟這個道理是一樣的,所以在使用過程中,一定要先判斷自己需要的對象是可變的還是不可變的.
未完待續....