NSFileManager和NSFileHandler的作用, category的理解
NSFileManager类可以管理文件系统中的文件和目录,也可以定位、判断是否存在、创建、拷贝、删除文件和目录,还可以获得文件和目录的信息;
对于读写文件,NSFileManager只可以读写字符串类型的文件,而NSFileHandler是文件描述符的封装类,可以读写文件(图片、设备、网络接口)、套接字、管道和设备。
代码示例:
/**
* 读文件
*/
- (void)readFile{
//1、实例化
NSFileHandle *readFile = [NSFileHandle fileHandleForReadingAtPath:@"/tmp/Hello.txt"];
//2、读文件到文件尾部
NSData *buffer = [readFile readDataToEndOfFile];
//3、将NSData转换成字符串
NSString *temp = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
//4、关闭文件
[readFile closeFile];
} /**
* 写文件
*/
- (void)writeFile{
//1、创建写文件处理器
NSFileHandle *writeFile = [NSFileHandle fileHandleForWritingAtPath:@"/tmp/newFile.txt"];
//2、将字符串转换成NSData
NSString *contents = @"hello everyone";
NSData *buffer = [contents dataUsingEncoding:NSUTF8StringEncoding];
//3、写NSData
[writeFile writeData:buffer];
//4、关闭文件
[writeFile closeFile];
}
关于category的一些理解
刚才在看category, 想到分类可以用来添加方法,子类也可以用来添加方法,子类还可以添加实例变量,不是比分类更好吗,为啥还要使用分类?
设想一个场景:想给系统类比如NSString新添加一个方法,而这个方法在整个项目中会大量用到,这时候如果使用子类A来添加这个方法,那么其他NSString的子类想使用这个方法,必须继承子类A,才能使用这个方法。但是有时候我们并不想继承子类A,分类的使用优势这时候出来了。
使用category给NSString新添加一个方法,其他NSString的子类想使用这个方法,直接继承NSString,并引用分类就可以使用了 !
分类通常作为一种组织框架代码的工具来使用。
查了下资料,介绍分类的用途:
1、在不创建继承类的情况下实现对已有类的扩展;
2、简化类的开发工作。例如,当一个类需要多个程序员协同开发时,分类可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合;
3、将常用的相关方法分组;
4、在没有源代码的情况下可以用来修复bug
NSFileManager和NSFileHandler的作用, category的理解的更多相关文章
- NSFileManager和NSFileHandler的作用
NSFileManager类可以管理文件系统中的文件和目录,也可以定位.判断是否存在.创建.拷贝.删除文件和目录,还可以获得文件和目录的信息: 对于读写文件,NSFileManager只可以读写字符串 ...
- C#接口作用的深入理解
1.C#接口的作用 C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识 ...
- js的闭包中关于执行环境和作用链的理解
首先讲一讲执行环境: 执行环境按照字面上来理解就是指目前代码执行所在的环境. 当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文会构成了一个执行上下文栈(Execution ...
- 转载:C# this.Invoke()的作用与用法 理解三
Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); 在多线程编程中,我们经常要在工作线程 ...
- 对Delphi控件作用的新理解(控件本身的源代码就是一个很强的工业级源码)
最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那 ...
- Android(java)学习笔记121:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解
先看看网路上的说法: android.intent.action.MAIN决定应用程序最先启动的 Activity android.intent.category.LAUNCHER决定应用程序是否显示 ...
- mysql索引作用的简单理解
转自:http://blog.csdn.net/pengsidong/article/details/62104703,有添加 索引好比书的目录,好比新华字典的拼音.偏旁部首查字,可以帮助人快速查找到 ...
- Android(java)学习笔记62:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解
1. 先看看网路上的说法: android.intent.action.MAIN 决定应用程序最先启动的 Activity android.intent.category.LAUNCHER 决定应用程 ...
- 理解 $nextTick 的作用
有同学在看 Vue 官方文档时,对 API 文档中的 Vue.nextTick 和 vm.$nextTick 的作用不太理解. 其实如果看一下深入响应式原理 - vue.js中的有关内容,可能会有所理 ...
随机推荐
- 浅谈2017noip信息奥赛普及组试题
[话前叨叨] 一些日常刷题策略(转载): PS:本题的题目信息来自洛谷平台 下面就是进入正题了(其实这也是我第一次在csdn写博客,所以写的不好的地方也请大家多多谅解和提点/微笑/) 一.score ...
- codeforces 955F Cowmpany Cowmpensation 树上DP+多项式插值
给一个树,每个点的权值为正整数,且不能超过自己的父节点,根节点的最高权值不超过D 问一共有多少种分配工资的方式? 题解: A immediate simple observation is that ...
- 运维与自动化系列④自动化部署基础与git
运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...
- Ex 7_17 考虑如下的网络(其中数字为对应边的容量)...第十三次作业
(a) 利用ford-fulkerson算法即可求出最大流和最小分割. (b) 剩余网络为 由S可达的顶点为A.B.可达T的顶点为C. (c) 瓶颈边有e(A,C),e(B,C). (d) 下图中不包 ...
- JMS消息队列之ActiveMQ简单示例
废话不多说,在进入主题前先看一张图,对ActiveMQ有个大体的了解: 下面进入主题: 1.添加需要的maven依赖 <!-- active mq begin --> < ...
- 30)django-ORM(元信息,级联删除,正反向操作,连表查询优化)
一:元信息 class User(models.Model): name=models.CharField(max_length,index=True) email=model.CharField(m ...
- FileStorage
1. 函数说明 功能 函数声明 参数 FileStorage构造函数 cv::FileStorage:: FileStorage(const String& ...
- HttpListener通讯成功案例
1.创建WindowsService,如下代码 using System;using System.Net;using System.Net.Sockets;using System.ServiceP ...
- vue.js----之router详解(一)
在vue1.0版本的超链接标签还是原来的a标签,链接地址由v-link属性控制 而vue2.0版本里超链接标签由a标签被替换成了router-link标签,但最终在页面还是会被渲染成a标签的 至于为什 ...
- html table
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...