IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用
生活随笔
收集整理的這篇文章主要介紹了
IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IOS基礎之NSFounation框架的NSDictionary,NSMutableDictionary的使用
// // main.m // Day11-NSFoudation框架 // // Created by 魯軍 on 2021/5/8. // /**1) NSString 的本質是1個類2) @"jack" 是NSString 對象3) 字符串的恒定性4) 最常用的5個方法5) 其他方法2。NSMutableString1) 是NSString 的子類可變3) 大批量的字符串的拼接的時候3 NSArray1)數組2) 特點3) 創建 取出 遍歷 其他的常用1) 是NSArray的子類2) 元素可以新增和刪除,5 。NSNumber 包裝基本數據類型的---------------------------------------1 將數組的值保存在磁盤中數據的持久化2.plist 屬性列表文件這個文件 可以保存數組,把數組中的元素保存在這個文件之中3.原理,將 數組的信息 存儲在plist文件之中,就會將數組的所有元素存儲到這個文件中- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;2.將plist文件當中的數據還原成一個數組。+ (NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path;*/ #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/lujun/Desktop/abc.plist"];if(arr!=nil){//讀取成功for (NSString *str in arr) {NSLog(@"%@",str);}}// NSLog(@"%@",arr);// [arr writeToFile:@"/Users/lujun/Desktop/abc.plist" atomically:NO];// NSString *str = @"jack"; // // NSArray *arr = @[@"jack",@"rose",@"lili",@"lucy"]; // // [arr writeToFile:@"/Users/lujun/Desktop/abc.plist" atomically:NO]; // // // for (NSString *str in arr) { // NSLog(@"%@",str); // }return 0; } // // main.m // 02-NSDictionary // // Created by 魯軍 on 2021/5/8. ///**數組的下標不固定,無法通過下標來確定數組中的元素所以 NSDictionary的引入。希望: 有一種存儲數據的方式,可以快速唯一的確定數組的元素。存儲數據的時候,必須要為存儲的數據鍵值對這個別名的作用,就是用來確定別名對應的數據的Key-ValueKey就是鍵Value就是值2.NSDictionary NSMutableDictionary1) 他們是數組,要找到存儲這個數組中的數據,通過別名來找,而不是下標3 NSDictionary 字典數組1) 存儲數據的原理a.以鍵值對的形式存儲數據b. 字典數組一旦創建,其中的元素就無法動態的新增和刪除c. 鍵 只能是遵守了NSCoping 協議的對象。 而NSString就是遵守了這個協議值: 只能是OC對象2)創建字典數組NSDictionary *dict = [NSDictionary new];NSDictionary *dict2 = [[NSDictionary alloc] init];NSDictionary *dict3 =[NSDictionary dictionary];這種創建沒有意義,因為 沒有任何元素3) 一般的創建的方式+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"北京市XX街道",@"address", nil];值鍵挨個寫在后面4) 簡要的創建方式NSDictionary *dict2 = @{鍵1:值1,鍵2:值2,鍵3:值3,鍵4:值4};NSDictionary *dict2 = @{@"name":@"rose",@"age":@"18",@"address":@"北京"};NSString *str = dict2[@"name"];NSLog(@"%@",str);NSString *str2 =[dict2 objectForKey:@"age"];沒有這個key返回的是nil不會報錯。如果鍵的不存在 ,返回的是nil計算有幾個鍵值對 NSUInteger count = dict2.count;5.遍歷字典數組1)字典數組中的數組無法使用下標去取2)使用for in 循環,遍歷出來的都是key 鍵再通過鍵取到值NSDictionary *dict2 = @{@"name":@"rose",@"age":@"18",@"address":@"北京"};for (id item in dict2) {NSLog(@"%@ = %@",item,dict2[item]);}3)使用block遍歷[dict2 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {NSLog(@"%@-",obj);}];6. 打印的順序,使用NSLog(@"%@",dict); 按照鍵的ASCII碼打印的字典數組存儲數據的原理1)當往字典數組中存儲1個鍵值對的時候,這個鍵值2)取值的時候,也是根據做1個哈希算法,就可以算出這個鍵值對存儲的下標,然后直接找到這個下標的數據取出就可以了。與NSArray對比,1)NSArray 數組是挨個挨個的屁股后面,按照順序來存儲的,字典數組中不是挨個挨個的存儲的2) 取得時候, 如果取值的時候,是全部一股腦的取出來,這個時候NSArray快一點如果取值的時候,只會取數組中指定的幾個元素,字典數組中的取值更快一點什么時候是有NSArray 什么時候使用字典數組存儲進去之后,一旦要取值,就是全部取出,NSArray存儲進去之后,取值只會取指定的幾個元素,字典數組。*/ #import <Foundation/Foundation.h> #import "CZPerson.h"int main(int argc, const char * argv[]) {NSDictionary *dict2 = @{@"name":@"rose",@"age":@"18",@"address":@"北京"};NSLog(@"%@",dict2);CZPerson *p1 = [[CZPerson alloc] initWithName:@"小明1"];CZPerson *p2 = [[CZPerson alloc] initWithName:@"小明2"];CZPerson *p3 = [[CZPerson alloc] initWithName:@"小明3"];CZPerson *p4 = [[CZPerson alloc] initWithName:@"小明4"];CZPerson *p5 = [[CZPerson alloc] initWithName:@"小明5"];NSArray *arr =@[p1,p2,p3,p4,p5];NSDictionary *dict = @{p1.name:p1,p2.name:p2,p3.name:p3,p4.name:p4,p5.name:p5};dict[@"小明3"];/*NSDictionary *dict2 = @{@"name":@"rose",@"age":@"18",@"address":@"北京"};for (id item in dict2) {NSLog(@"%@ = %@",item,dict2[item]);}[dict2 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {NSLog(@"%@-",obj);}];*//*NSDictionary *dict2 = @{@"name":@"rose",@"age":@"18",@"address":@"北京"};[dict2 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {NSLog(@"%@-",obj);}];for(NSString *item in dict2.allKeys){NSLog(@"%@",item);}NSUInteger count = dict2.count;NSLog(@"%lu",count); //3NSString *str = dict2[@"name"];NSLog(@"%@",str);NSString *str2 =[dict2 objectForKey:@"age"];NSLog(@"%@",str2);NSLog(@"%@",dict2);NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"北京市XX街道",@"address", nil];NSLog(@"%@",dict);*/ // // NSDictionary *dict = [NSDictionary new]; // NSDictionary *dict2 = [[NSDictionary alloc] init]; // NSDictionary *dict3 =[NSDictionary dictionary];// // NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"jack",@"rose",@"lili", nil]; // // [arr indexOfObject:@"lili"]; // [arr addObject:@"lucy"]; // [arr removeObjectAtIndex:0]; // [arr removeObjectAtIndex:2]; //return 0; } // // CZPerson.h // 02-NSDictionary // // Created by 魯軍 on 2021/5/8. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface CZPerson : NSObject @property(nonatomic,strong)NSString * name; -(instancetype)initWithName:(NSString *)name; @end NS_ASSUME_NONNULL_END// // CZPerson.m // 02-NSDictionary // // Created by 魯軍 on 2021/5/8. //#import "CZPerson.h" @implementation CZPerson - (instancetype)initWithName:(NSString *)name{if(self=[super init]){self.name = name;}return self; } @end // // main.m // 03-NSMutableDictionary // // Created by 魯軍 on 2021/5/8. // /**NSMutableDictionary1) 是NSDictionary的子類,所以 NSMUItableDictionary 也是1個字典數組,也是以鍵值對的形式存儲數據的2) 重點: NSMutableDictionary 在父類的基礎之上做的擴展,存儲在其中的元素可以動態的新增和刪除3) 創建可變的字典數組NSMutableDictionary *dict = [NSMutableDictionary new];NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init];NSMutableDictionary *dict3 = [NSMutableDictionary dictionary];這樣創建出來的可變數組的長度為0 ,是有意義的,可以動態的新增和刪除NSMutableDictionary *dict5 = @{@"name":@"jack"};這樣是不行的,報錯的。2.如果新增鍵值對,- (void)setObject:(ObjectType)anObject forKey:(id<NSCopying>)aKey;[dict setObject:@"廣州市xxx街道" forKey:@"address"];如果鍵重復,后添加的就會替換原有的3,如何刪除呢- (void)removeAllObjects;刪除所有的數組字典刪除指定的鍵值對根據鍵去刪除指定的 鍵值對- (void)removeObjectForKey:(KeyType)aKey;[dict removeObjectForKey:@"name"];4.字典的數組的信息持久化起來也可以將字典的數組信息保存到plist文件中+ (NSDictionary<KeyType, ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;從plist 文件中還原回字典*/ #import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/lujun/Desktop/dict.plist"];NSLog(@"%@",dict);// NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"18",@"age", nil]; // // [dict setObject:@"廣州市xxx街道" forKey:@"address"]; // [dict setObject:@"178.1" forKey:@"height"]; // // //數據的持久化[dict writeToFile:@"/Users/lujun/Desktop/dict.plist" atomically:NO]; // NSLog(@"YES");// NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"18",@"age", nil]; // [dict setObject:@"廣州市xxx街道" forKey:@"address"]; // [dict setObject:@"183.3" forKey:@"height"]; // [dict setObject:@"Lujun" forKey:@"name"]; // [dict setObject:@"Lujunjun" forKey:@"name"]; // NSLog(@"%@",dict); // [dict removeObjectForKey:@"name"];// [dict removeAllObjects];// NSLog(@"%@",dict);/*NSMutableDictionary *dict = [NSMutableDictionary new];NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init];NSMutableDictionary *dict3 = [NSMutableDictionary dictionary];NSMutableDictionary *dict4 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"18",@"age", nil];*/return 0; } // // main.m // 03-集合的內存管理 // // Created by 魯軍 on 2021/5/9. ///**集合NSArray集合,NSDictionary字典集合,就叫做集合2.在MRC的模式下,將1個對象存儲到集合中,會不會影響到引用的計數器將對象存儲到集合之中,會為這個對象的引用計數加1當集合銷毀的時候,就會向存儲在集合中的所有的對象發送1條release消息3 使用@[] 或者 @{} 創建的集合已經是被autorelease過的了直接調用同名的類方法創建的對象,也是被autorelease過的了4. 在ARC的模式下, 集合的元素是1個強類型的指針。*/ #import <Foundation/Foundation.h> #import "CZPerson.h" int main(int argc, const char * argv[]) {CZPerson *p1 = [CZPerson new];NSArray *arr = @[p1];// // @autoreleasepool { // NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lili", nil]; // NSArray *arr2 = @[@"luxu",@"lujun",@"dajun"]; // // } // // // CZPerson *p1 = [CZPerson new]; // // NSLog(@"%lu",p1.retainCount); // // NSArray *arr = @[p1]; // // NSLog(@"%lu",p1.retainCount); // // // [arr release]; // NSLog(@"%lu",p1.retainCount); // // //有對象創建,就有對象釋放 // [p1 release]; //return 0; }源碼在我的主頁下面
總結
以上是生活随笔為你收集整理的IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 助你解决新手开车四大问题 为您支招
- 下一篇: 敏捷教练的工具箱