iOS学习(OC语言)知识点整理

一、单例模式

1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象,

不管实例化单例对象多少次,只有一个对象存在,这个对象是全局的,能够被整个应用程序共享,访问

2)使用单例模式时使用类提供的类方法获取单例对象,尽量不要用alloc init的方法获取单例对象

3)单例类提供类方法获取单例对象时类方法一般以sharedXX/standedXX/defaultXX开头

实例代码:

#import "Plane.h"
static Plane *plane=nil;//定义一个静态的全局变量
@implementation Plane
//获取单例对象的方法
+(Plane *)sharedPalne
{
//解决数据同步(当一个线程访问时,其他的线程不能操作
@synchronized(self){
if(plane==nil){
plane=[[Plane alloc]init];
}
}
return plane;
} //当调用alloc方法时会执行此方法
+(id)allocWithZone:(struct _NSZone *)zone
{
NSLog(@"%@",NSStringFromSelector(_cmd));
if(plane==nil){
plane=[super allocWithZone:zone];
}
return plane;
}
@end

二、NSFileManager  文件/文件夹 的操作

1)NSFileManager 用于对文件或目录(文件夹)管理的单例类。

2)文件管理类的实例化方法 例如:

  NSFileManager *fm=[NSFileManager defaultManager];

3)fileExistsAtPath 用于判断文件是否存在 例如:

 BOOL ret=[fm fileExistsAtPath:@"/Users/kingkong/Desktop/Test/test.txt"];

4)createFileAtPath 用于创建文件 第一个参数是文件名,第二个参数是文件的初始值,第三个参数是文件的属性 例如:

 BOOL ret=[fm createFileAtPath:@"/Users/kingkong/Desktop/Test/test.txt" contents:nil attributes:nil];

5)copyItemAtPath 用于复制文件:将某一个文件复制成另一个文件,第三个参数:回调错误信息 例如:

   NSError *error=nil;//用于接收错误信息
NSString *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;
5 NSString *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;
ret=[fm copyItemAtPath: curpath toPath: topath error:&error];
if(error!=nil){
NSLog(@"error:%@",[error userInfo]);
}

6)moveItemAtPath 用于移动/重命名文件;将某个路径下的文件移动到另一个路径下的文件(目标路径一定要指定文件名),

如果源路径与目   标路径下的文件名不同,同时重命名 例如:

 NSString  *curpath=@"/Users/kingkong/Desktop/Test/test.txt”;

 NSString  *topath=@"/Users/kingkong/Desktop/Test/test2.txt”;

 [fm moveItemAtPath: curpath toPath: topath error:nil];

7)attributesOfItemAtPath 获取文件的属性 例如:

 NSString  *curpath=@"/Users/kingkong/Desktop/Test/test.txt";

 NSDictionary *dict= [fm attributesOfItemAtPath: curpath error:nil];

 //获取属性字典中该文件的大小

 NSLog(@"size:%@",[dict objectForKey:NSFileSize]);

8)removeItemAtPath 用于删除指定路径下的文件 例如:

 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;

 BOOL ret=[fm removeItemAtPath: path error:nil];

9)NSData:当对文件操作(写数据到文件和从文件中读数据)和从网络上获取数据,需要将数据转换为纯粹的二进制形式,

NSData就是二进制形式的缓存对象,相当于C中的char buf[255] 例如:

 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;

 NSData *content=[fm contentsAtPath: path]; 

10)NSData数据转换为NSString类型数据 例如:

  //NSData---->NSString,将NSData对象转换为字符串

 NSString *scontent=[[NSString alloc]initWithData:content  encoding:NSUTF8StringEncoding];      

11)NSString类型的数据转换为NSData数据 例如:

 NSString *str=@"hello China!";

 //NSString---->NSData;将字符串转换为NSData数据(写入文件或传输到网络上)

 NSData *data2=[str dataUsingEncoding:NSUTF8StringEncoding];

12)createFileAtPath … contents 建文件并指定写入内容 例如:

 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;

 [fm createFileAtPath:path contents:data2  attributes:nil];

13)fileExistsAtPath… isDirectory 判断目录是否存在(在文件/目录存在的情况下,通过第二个参数获取是否是目录/文件) 例如:

 BOOL isDir;//可能结果有:-1,0,1

 NSString  *path=@"/Users/kingkong/Desktop/Test/test.txt”;

 BOOL ret=[fm fileExistsAtPath:path isDirectory:&isDir];

14)contentsOfDirectoryAtPath 浅遍历:获取目录下的子目录和文件名 例如:

 NSString  *path=@"/Users/kingkong/Desktop/Test”;

 NSArray *array=[fm contentsOfDirectoryAtPath: path error:nil];

 NSLog(@"array%@",array);

15)subpathsAtPath  深遍历:获取目录下所有的内容(包括子目录下的所有的内容) 例如:

 NSString  *path=@"/Users/kingkong/Desktop/Test”;

 NSArray *array2=[fm subpathsAtPath:path];

 NSLog(@"array2:%@",array2);

16)currentDirectoryPath 获取当前应用程序所在目录 例如:

 NSString* currentPath=[fm currentDirectoryPath];

 NSLog(@"%@",currentPath);

17)createDirectoryAtPath… withIntermediateDirectories  创建目录,第一个参数是目录名,第二个参数是

当目录不存在时是否需要创建其上一级不存在的目录(中间目录)

 NSString  *path=@"/Users/kingkong/Desktop/Test/File”;

 BOOL ret=[fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

三、NSFileHandle 对文件进行读写操作

1)fileHandleForReadingAtPath 创建一个只读文件的对象(句柄) 例如:

 NSString *path=@"/Users/kingkong/Desktop/Test/test.txt”;

 NSFileHandle *readHandle=[NSFileHandle fileHandleForReadingAtPath: path];

2)readDataOfLength 读取文件中指定长度的内容 例如:

NSData *data=[readHandle readDataOfLength:];

NSString *sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",sdata);

3)readDataToEndOfFile 从当前位置读取内容到文件结束 例如:

 data=[readHandle readDataToEndOfFile];

 sdata=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

 NSLog(@"%@",sdata);

 [readHandle closeFile];//读取文件内容结束(注意如果上次读取过没关闭再次读取时会从上次读取结束位置开始读取)

4)fileHandleForWritingAtPath 创建一个只写文件的对象 例如:

 NSFileHandle *writeHandle=[NSFileHandle fileHandleForWritingAtPath:path"];

 NSString *s1=@"hello";

 //seekToEndOfFile 将对象指针移到文件末尾(实现追加内容)

 [writeHandle seekToEndOfFile];

 [writeHandle writeData:[s1 dataUsingEncoding:NSUTF8StringEncoding]];

  //synchronizeFile将数据同步写入文件中

 [writeHandle synchronizeFile];

 [writeHandle closeFile];//表明操作结束

5)truncateFileAtOffset 从指定位置字符开始截断文件内容,保留多少个字符,设置为0,再写入相当于清空重写 例如:

  [writeHandle truncateFileAtOffset:];

6)seekToFileOffset 从指定位置字符开始写入文件,覆盖部分内容 例如:

    [writeHandle seekToFileOffset:];

四、关于Path (文件路径)的操作

1)pathComponents 获取路径的各部分 例如:

 NSString *path=@"/Users/kingkong/Desktop/Test/text.txt”;

 NSArray *array1= [path pathComponents];

 NSLog(@"array1:%@",array1);

2)pathExtension 获取文件后缀名 例如:

 NSLog(@"%@",[path pathExtension]);//结果:txt

3)isAbsolutePath 判断是否是绝对路径:以/开头的路径 例如:

  NSLog(@"%d",[path isAbsolutePath]);//结果:1

4)lastPathComponent 获取路径的最后一部分  例如:

  NSLog(@"last:%@",path.lastPathComponent);//结果:text.txt

5)stringByAppendingPathComponent 在一个路径后添加另一个路径 例如:

 NSLog(@"%@",[path stringByAppendingPathComponent:@"files”]);

 //结果:/Users/kingkong/Desktop/Test/text.txt/files

6)stringByAppendingPathExtension 为路径添加扩展名 例如:

 NSLog(@"%@",[path stringByAppendingPathExtension:@"m"]);

 //结果:/Users/kingkong/Desktop/Test/text.txt.m

iOS阶段学习第17天笔记(NSFileManager-NSFileHandle-文件操作)的更多相关文章

  1. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  2. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

  3. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  4. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  5. iOS阶段学习第29天笔记(UITextField的介绍)

    iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: //创建一个UIt ...

  6. iOS阶段学习第20天笔记(MRC内存管理)

    iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用 ...

  7. iOS阶段学习第14天笔记(NSString与NSMutableString)

    iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...

  8. iOS阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

  9. iOS 阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

随机推荐

  1. [stm32] NRF24L01+USART搞定有线和无线通信

    前言 一般进行远程监控时,2.4G无线通信是充当远程数据传输的一种方法.这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据 ...

  2. 手把手教你用python打造网易公开课视频下载软件5-python生成exe程序

    python程序生成exe文件,使用的是py2exe扩展包,下面写下具体的步骤: 第一步:新建conver2exe.py,内容如下: #coding:utf-8 from distutils.core ...

  3. BIT祝威博客汇总(Blog Index)

    +BIT祝威+悄悄在此留下版了个权的信息说: 关于硬件(Hardware) <穿越计算机的迷雾>笔记 继电器是如何成为CPU的(1) 继电器是如何成为CPU的(2) 关于操作系统(Oper ...

  4. java Decompiler的bug

    java Decompiler 有一个明显的bug是, 之前的打开jar文件,会被缓存起来,如果再次打开同名jar文件(jar内容替换~!),会导致仍然显示原来内容! . 必须关闭Decompiler ...

  5. Java-单例模式(singleton)-转载

    概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. ...

  6. 用Chrome插件对自动化测试TestWriter进行录制

    1.打开Chrome浏览器,在浏览地址中输入: chrome://extensions/,并勾选开发者模式.如图: 2.点击按钮[加载已解压的扩展程序-].如图: 3.选择Testwriter客户端下 ...

  7. MySQL5.7.13源代码阅读心得

    1.使用gdb这个调试工具. 在linux使用该调试工具非常简单.它的价值非常大,可以告诉你函数相互调用的逻辑(bt命令),告诉你函数执行的情况(通过br命令以及n,c命令单步跟踪函数每一个语句的执行 ...

  8. 冒泡排序java代码

    冒泡排序就是依次取出最大数,然后依次交换放到数组最后边. 直观写法: public long[] sort(long[] a){ int n = a.length - 1; // Step:1 选出最 ...

  9. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

  10. javase基础复习攻略《八》

    进入第八篇,我们开始讨论JAVA的IO初步.在JAVA程序中,对数据的输入\输出操作以"流"(stream)方式进行,J2SDK提供了各种各样的"流"类,用于获 ...