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的使用相关推荐

  1. IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例

    IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例 1.01_FileManager学习 // // main.m // ...

  2. 黑马程序员——零基础学习iOS开发——13 Foundation框架

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  3. IOS基础基于pod上手体验FMDB框架

    IOS基础基于pod上手体验FMDB框架 // // ViewController.m // FMDBSingleOC // // Created by 鲁军 on 2021/3/17. //#imp ...

  4. iOS面试必备-iOS基础知识

    近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内 ...

  5. iOS基础-高级进阶面试题

    1.OC 语言的基本特点  OC 语言是 C 语言的一个超集,只是在 C 的基础之上加上了面向对象(oop) 的特性; OC 与 Java 语言相同都是单继承,这一点与 C++语言不同(多重继承); ...

  6. iOS音频播放第三方框架FreeStreamer解析(全)

    iOS音频播放第三方框架FreeStreamer解析(全) 新项目是一款音频播放类软件,作为该项目核心功能:音频播放.第一版本是使用了系统提供的AVPlayer框架来实现音频文件的播放,再开发完成之后 ...

  7. iOS基础-UIWindow

    iOS基础-UIWindow 一.简介: 二.UIWindow的创建过程 一.简介: UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建 ...

  8. iOS基础问答面试题连载-附答案

    2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...

  9. iOS流媒体直播整个框架介绍(HLS、RTSP)

    iOS流媒体直播整个框架介绍(HLS.RTSP) 目录技术文章2016年7月17日 一.HTTP(WebService) 基于HTTP的渐进下载Progressive Download流媒体播放仅是在 ...

最新文章

  1. android实现计算器功能吗,利用Android实现一个简单的计算器功能
  2. 如果女朋友突然问你DNS是个啥...
  3. 被“轻视”的CV·AR的背后核心技术
  4. sync - 清空文件系统缓冲区
  5. windows 防火墙疑难解答程序_不用愁!旧程序也能在Win 10系统下顺利运行,这一招很实用...
  6. 2020年7月4日 随机过程大作业
  7. Grow heap (frag case) to 6.437MB for 1114126-byte allocation
  8. Libra 的 Move 语言初探,10 行代码实现你第一个智能合约
  9. 处理PHP字符串的10个简单方法
  10. git log格式化日志
  11. android 屏幕方向改变 重新测量,android – 扫描时自动更改屏幕方向(使用ZXING库)...
  12. html 行级元素和块级元素标签列表分别有哪些
  13. python集合类型中的元素是有序的_Python数据类型之集合set
  14. 人越是没钱,越要戒掉这4点毛病,否则穷苦一辈子!
  15. MySQL数据库基础
  16. GPS模块运用: GPS轨迹记录
  17. stm32运行java虚拟机_windows下的基于Eclipse的STM32开发调试环境搭建
  18. DTC品牌如何冷启动?
  19. 有效使用二维码进行APP推广
  20. vue3使用笛卡尔积算法生成sku表格

热门文章

  1. python scrapy request_Scrapy中的Request和日志分析|python基础教程|python入门|python教程...
  2. saveas java_在SaveAs之后Excel崩溃
  3. hbase集群之间数据迁移_hbase数据迁移到另一集群上
  4. nc 模拟服务器_NC集群服务器使用详解
  5. 华为耳机5根线怎么接线图解_联通宽带突然无法上网怎么急救处理?
  6. 01初识鸿蒙_移动通讯技术的发展
  7. python中module的意思_python中module的意思
  8. powerbuilder查询符合条件的数据并且过滤掉其他数据_论文浅尝 ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询...
  9. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)
  10. Python3 OOP(四) 获取对象信息