文档章节

OC语言-Foundation框架2

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/08 17:42
字数 1995
阅读 5
收藏 0
  • NSDictionary 字典数组

         1). 存储数据的原理.

             a. 以键值对的形式存储数据.

             b. 字典数组一旦创建,其中的元素就无法动态的新增和删除.

             c. 键: 只能是遵守了NSCoping协议的对象. 而NSString就是遵守了这个协议.

                值: 只能是OC对象.

         2). 创建字典数组

             NSDictionary *dict1 = [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 *dict = @{键1:值1,键2:值2,键3:值3,........};       

             NSDictionary *dict = @{@"name":@"rose",@"age":@"18",@"addredd":@"BeiJingXXSttreet"};

  • 如何取出存储在字典数组中的数据.

             a. 存储在字典数组中的元素不能使用下标去取 而是用键 也就是别名去取.

             -> 使用中括弧的方式.

                字典数组名[键]; 这样就可以去到字典数组中这个键对应的值.

                NSLog(@"%@",dict[@"name"]); 取出dict字典数组中@"name"这个键对应的值.

             -> 调用字典数组对象的方法也可以取出键对应的值.

               - (nullable ObjectType)objectForKey:(KeyType)aKey;

            如果给定的key在数组中不存在,取到的值是nil 不会报错.

  • 遍历字典数组 

1.使用for in循环. 遍历出来的是字典数组中所有的键. 再通过键取出对应的值.

         NSDictionary *dict = @{

                 @"name":@"rose",

                 @"age":@"18",

                 @"address":@"BeiJingXXSttreet"

         };               

         for(id item in dict)

         {

                NSLog(@"%@ = %@",item,dict[item]);

         }

    2. 使用block遍历.       

         [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {        

                NSLog(@"%@ = %@",key,obj);      

         }];

  •  NSMutableDictionary

        1). 是NSDictionary的子类.所以NSMutableDictionary也是1个字典数组,也是以键值对的形式存储数据的.

        2). 重点:NSMutableDictionary在父类基础之上做的扩张:

            存储在其中的元素可以动态的新增和删除.

  •  如何删除.

        - (void)removeAllObjects; 删除所有的键值对.

        - (void)removeObjectForKey:(KeyType)aKey; 删除指定的键值对.

  • NSFileManager是1个类.

         这个类的对象是以单例模式创建的.

         如何得到NSFileManager的1个单例对象.

         掉用这个类的类方法,defaultManager 就可以得到这个类的单例对象

         NSFileManager *fileManager = [NSFileManager defaultManager];

     
  • 常用方法之 判断.

         1). 判断指定的文件或者文件夹在磁盘上是否真实的存在

            - (BOOL)fileExistsAtPath:(NSString *)path;

         2).判断指定的路径是否真实的存储在我们的磁盘之上,并且判断这个路径是1个文件夹路径还是1个文件路径.

            - (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;

            返回值:代表这个路径是否真实存在.

            参数指针: 代表这个路径是否是1个文件夹路径     

         3). 判断指定的文件夹或者文件是否可以读取.

             - (BOOL)isReadableFileAtPath:(NSString *)path;

         4). 判断指定的文件夹或者文件是否可以写入.

             - (BOOL)isWritableFileAtPath:(NSString *)path;

         5). 判断指定的文件夹或者文件是否可以删除.

             - (BOOL)isDeletableFileAtPath:(NSString *)path

     

  • 常见方法之 获取信息.

        1).获取指定文件或者文件夹的属性信息.

           - (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error

           返回的是1个字典,如果要拿到特定的信息 通过key

        2).获取指定目录下的所有的文件和目录. 是拿到指定目录下的所有的文件和目录 所有的后代目录和文件.

           子目录的子目录的子目录 所有的都可以拿到.

           - (NSArray *)subpathsAtPath:(NSString *)path;

        3).获取指定目录下的所有的子目录和文件 不保护孙子辈.

           - (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error

     
  • 常见方法之 文件/目录的创建    

        1). 在指定的目录创建文件.

            - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr

            第1个参数: 要创建的文件的路径.

            第2个参数: 这个文件的内容.  要传递这个文件的二进制格式. 

                      这个二进制的数据格式 使用NSData对象来封装.

                      NSData: 将别的格式的数据转换为二进制数据.

                      将字符串转换为NSData二进制的方式.调用字符串对象的

                       - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

                       编码参数: NSUTF8StringEncoding

                      指定1个编码 就可以将字符串转换为二进制数据 存储在NSData对象之中.

                      最后再将这个二进制对象通过这个方法写入.

                      如果想创建1个空文件 第2个参数就给nil

            第3个参数: 指定创建的文件的属性.如果想要使用系统的默认值使用nil

        2). 在指定的目录创建文件夹.

            - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error

            第1个参数: 路径.

            第2个参数: YES,做一路创建. 如果是NO就不会做一路创建.

            第3个参数: 指定属性 nil为系统默认属性.

            第4个参数.

        3).拷贝文件.

           - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error    

        4).移动文件 剪切 文件的重命名. 重名的原理: 将文件移动到原来的目录并改名.

           - (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

        5).删除文件.

           - (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error

          注意 删除的文件不会倒废纸篓 而是直接删除,所以请小心使用.

     
  • NSDate 时间处理.

        1). 可以得到当前时间. 创建1个NSDate对象就可以了,将这个对象输出,就是当前时间

            得到的是当前系统的格林威治时间. 0时区的时间. 东8区.

            NSDate *date = [NSDate date];

            NSLog(@"%@",date);

    - (NSString *)stringFromDate:(NSDate *)date; //将日期类型换换为字符串

     - (NSDate *)dateFromString:(NSString *)string;//将字符串转换为日期对象.

     
  • copy 复制

     1). copy是1个方法.定义在NSObject类之中. 作用:拷贝对象.

         NSString ----> copy ---> 不可变字符串  没有产生新对象,而是直接将对象本身的地址返回. 这种拷贝我们叫做浅拷贝

         NSMutableString --> copy --> 是1个不可变的字符串对象 .  有产生1个新对象.这样的拷贝我们叫做深拷贝.

  • 字符串对象拷贝的引用计数器的问题.

         1). 若字符串对象存储在常量区中. 存储在常量区的数据是不允许被回收的.

             所以存储在常量区的字符串对象的引用计数器是1个超大的数.并且retain和release无效.

         2). 若字符串存储在堆区. 这个字符串对象和普通的对象一样的.引用计数器默认是1.

         3). 字符串对象如果是浅拷贝. 会将对象的引用计数器+1

             字符串对象如果是深拷贝. 原来的对象的引用计数器不变.新拷贝出来的对象的引用计数器为1.

  • 如果我们想要让我们自己的类具备对象拷贝的能力.那么就让我们的类遵守NSCoping协议

        并实现copyWithZone:这个方法. 

        如果想要实现深拷贝:那么就重新创建1个对象.并将对象的属性的值复制.返回.

        如果想要实现浅拷贝:那么就直接返回self

     
  • 单例模式:

         1个类的对象,无论在何时创建也无论在什么地方创建 也无论创建多少次.创建出来的都是同1个对象.

    2. 无论如何创建对象,最终都会调用alloc方法来创建对象.   

         1). alloc方法的内部. 其实什么都没有做,只是调用了allocWithZone:方法.

         2). 实际上真正申请空间 创建对象的事情是allocWithZone:方法在做.

      3. 要实现单例模式.

         重写+ allocWithZone:

         + (instancetype)allocWithZone:(struct _NSZone *)zone

         {

             static id instance = nil;

             if(instance == nil)

             {

                instance = [super allocWithZone:zone];

             }

             return instance;

         }

      4. 单例模式的规范:

         如果类是1个单例模式.要求为类提供1个类方法.来返回这个单例对象.

         类方法的名称必须以 shared类名; default类名;

     

     

 

© 著作权归作者所有

共有 人打赏支持
盘盘的灰灰
粉丝 0
博文 31
码字总数 24142
作品 0
深圳
iOS引用转换:Foundation与Core Foundation对象互相转换(__CFNSString转NSString,void *转id等等)

1. 两个框架的基本知识 1.1 Foundation 框架名是,在Xcode新建工程时可以选择导入(其实会默认自动依赖好)。Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组,...

陈满iOS
05/10
0
0
C/OC/Swift的数据类型没那么简单

数据类型决定了值如何存储到计算机内存中。在声明变量时也可指定它的数据类型。不同数据类型来存储不同的信息,所有变量都具有数据类型,以决定能够存储哪种数据。 C语言 C语言的基本数据类型...

CoderDancer
2017/08/10
0
0
iphone开发技术要学习的内容

一.iOS基础   1 开发环境搭建以及IOS组件、框架的概要介绍。   2 mac操作系统与iOS操作系统   3 xcode IDE开发环境的初始   二.C语言基础   1数据类型、表达式与控制流程语句   ...

和谐中原植物酒
2015/08/24
138
2
Xcode常用操作

1)如果三方框架中有catagery 分类,那么需要在bulding中设置, other link flas -ObjC 2)ios9需要https, 如果网站不是https,那么info plist 添加 <key>NSAppTransportSecurity</key> <dict> <......

理性编程
2016/06/05
10
0
五.Foundation框架(1)--NSSize   NSPoint   NSRange   NSRect 结构体

在讲述框架之前,我们可以想象一个问题,那就是为什么我们每次创建文件的时候,都去选择Cocoa Class或者Cocoa Touch Class 尼? Cocoa 是什么? ocoa不是一种编程语言(它可以运行多种编程语言...

天宇逍遥heart
2016/09/20
6
0

没有更多内容

加载失败,请刷新页面

加载更多

Univalsal_ImageLoader源码结构与创建者模式 初步小结

最近在回归看Univalsal_ImageLoader源码,本想自己也实现试试写一个,看源码是为了学习看能否使用,助于自己可以写出有自己逻辑结构的代码。 首先我们初始化ImageLoader的配置初始化的时候,...

DannyCoder
33分钟前
0
0
计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
3
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
2
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部