文档章节

OC语言-Foundation框架2

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/08 17:42
字数 1995
阅读 5
收藏 0
点赞 0
评论 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

iphone开发技术要学习的内容

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

和谐中原植物酒 ⋅ 2015/08/24 ⋅ 2

C/OC/Swift的数据类型没那么简单

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

CoderDancer ⋅ 2017/08/10 ⋅ 0

Xcode常用操作

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

理性编程 ⋅ 2016/06/05 ⋅ 0

五.Foundation框架(1)--NSSize   NSPoint   NSRange   NSRect 结构体

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

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

foundation之结构体

一、基本知识 Foundation—基础框架。框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础。 如果要想使用foundation框架中的数据类型,那么包含它的主头文件...

DevShaw ⋅ 2016/01/07 ⋅ 0

OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/41809719,今天来看一下Foundation框架中的NSDirctionary类,NSMutable......

jiangwei0910410003 ⋅ 2014/12/10 ⋅ 0

01 - Object-C入门

Object-C简介 在C语言的基础之上,增加了一层最小的面向对象语法 完全兼容C语言 oc代码中可以混合使用C语言和C++代码 oc可以用来开发MAC OS X平台和 ios平台的应用程序 基本语法 关键字 基本...

口十耳 ⋅ 2015/12/22 ⋅ 0

OC学习篇之---Foundation框架中的NSObject对象

前一篇文章讲到了OC中的代理模式:http://blog.csdn.net/jiangwei0910410003/article/details/41777627,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架...

jiangwei0910410003 ⋅ 2014/12/07 ⋅ 0

OC Foundation & NSString 字符串

一 Foundation 简介 Foundation 框架是苹果公司提供给开发人员,提高效率的的工作库。 Foundation中提供了了多类,定义在头文件中。例如NSString类: #import <Foundation/NSSortDescriptor...

卧龙小 ⋅ 2014/11/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 18分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 28分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 46分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 54分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部