1.应用程序的沙盒(sandbox)
打开:桌面-前往-ALT-资源库-Application Support-iPhone Simulator --
Applications-…….-Documents-Library-tmp-
•Bundle是一个目录,其中包含了程序会使用到的资源,这些资源包含了如图像、声音、编译好的代码、nib文件等。
•Cocoa提供了类NSBundle来访问应用程序中用到的资源。
//bundle是沙盒下的应用程序,是只读的,获取plist文件路径
NSString *path = [[NSBundle mainBundle]pathForResource:@“---" ofType:@“---”];
Documents目录:应用程序将其数据存储在Documents目录中,可读写获取Documents目录:
eg: NSArray *array = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ); // 查找 Documents( NSLibraryDirectory ) 目录,搜索限制在应用程序沙盒内, YES 将搜索后的路径中~符号展开为实际路径
NSString *documentsDiretoryPath = [paths objectAtIndex:0];
eg:同上
获取tmp目录:
eg: NSString *tmpDirectoryPath = NSTemporaryDirectory ();
2.使用NSString进行文件读写
读:
eg: NSString *filePath = [documentsPath stringByAppendingPathComponent : @"content.txt" ];
NSError *error = nil;
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];//一文件路径,二读取文件时用的编码,三错误对象的地址
if (error != nil) {
NSLog(@"出错的,信息为:%@",error);
}else{
self.textView.text = content;
}
写:eg: NSString *content = self . textView . text ;
NSError *error = nil;
[content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];//YES保存文件会生成临时文件
if (error != nil) {
NSLog(@"出错的,信息为:%@",error);
}else{
NSLog(@"保存成功");
}
3.使用NSData进行文件读写,更多用来读写二进制
读:
eg:NSData *data = [NSData dataWithContentsOfFile:filePath];
写:
eg: NSData *data = nil;//定义接受的文件
[data writeToFile:@“文件保存” atomically:YES];
4.NSFileManager的使用 :管理文件及目录的类,可以判断文件是否存在,创建,删除文件,
eg:NSFileManager *fileManager = [NSFileManager defaultManager]; //创建
BOOL isExits = [fileManager fileExitsAtPath:@“文件路径”]; //判断文件是否存在
[fileManager createFileAtPath:@“文件路径” contents:nil attributes:nil]; //创建一个指定内容及属性的文件在给定路径处
[fileManager moveItemAtPath:@“源文件” toPath:@“目标路径” error:nil]; / /移动一个文件到目标位置
5.NSFileHandle的使用
使用步骤: 1. 打开文件
2.通过NSFileHandle进行输入/输出操作
3.关闭文件 -(void)closeFile
获取NSFileHandle对象:
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:@“文件路径”];//创建只读 (fileHandleForUpdatingAtPath) //创建读写 (fileHandleForWritingAtPath) //创建只写
NSData* data = [handle readDataOfLength:1000];
// 读取指定长度字节的数据
NSData* data = [handle readDataToEndOfFile];
// 读取直到文件结尾的数据
[handle seekToEndOfFile]; // 将句柄移动到文件结尾
[handle seekToFileOffset:1000]; // 将句柄移动到指定字节处
[handle writeData:[[NSData alloc]init]]; // 在当前句柄处写入数据
NSData* data = [handle availableData]; // 取得当前句柄上所有可用的数据
[handle closeFile]; // 关闭句柄指向的文件poo0+
属性列表:项目名-info.plist的文件
属性列表序列化:是指将对象转换为字节流,以便存储或传输
对像归档: 使用归档必须实现NSCoding协议 < NSCoding >
NSCoding协议声明的两个方法:
一个方法将对象编码到归档中,
一个方法将归档进行解码创建一个对象。
eg:
//aCoder编码器
-(void)encodeWithCoder:(NSCoder *)eCoder {
[eCoder encodeInt:self.age forKey:@"age"];
[eCoder encodeObject:self.name forKey:@"name"];
}//dDecoder 解码器
-(id)initWithCoder:(NSCoder *)dDecoder {
if (self = [super init]) {
self.age = [dDecoder decodeIntForKey:@"age"];
self.name = [dDecoder decodeObjectForKey:@"name"];
}
return self;
}
//定义归档器
NSKeyedArchiver *key = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; //将obj归档,forkey用来指定后面解码用的
[key encodeObject:obj forKey:@"stu"];
//关闭归档器
[key finishEncoding];
//定义解码器
NSKeyedUnarchiver *key = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//通过解码器,获取解码器中的内容
Student *st = [key decodeObjectForKey:@"stu"];
[key finishDecoding];
网络请求:
网络请求简介及状态检查:
a Xcode-Organizer-Documentation
b 在搜索栏输入:Reachability-选择Sample Code - Reachbility
c 打开Open Project
typedef enum {
NotReachable = 0, //网络连接不可用
ReachableViaWiFi, //通过wifi连接
ReachableViaWWAN //通过2G/3G网络连接
} NetworkStatus;
NSString获得远程文本文件
NSURL *url = [NSURL URLWithString:@“远程地址”];
NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSDate获得远程二进制文件
NSURL *url = [NSURL URLWithString:@“远程地址”];
NSData *data = [NSData dataWithContentsOfURL:url];
网络连接方式:
同步:
步骤:创建NSURL, NSURL *url = [ NSURL URLWithString :@“”];
通过NSURL创建NSURLRequest,
//创建网络请求
NSURLRequest *req = [ NSURLRequest requestWithURL :url];建立NSURLConnection发送同步请求,
/*
* 请求对象
* 响应者
* 错误的对象
*/
[NSURLConnection sendSynchronousRequest:<#(NSURLRequest *)#> returningResponse:<#(NSURLResponse **)#> error:<#(NSError **)#>];
数据完成之后进行处理
异步:
步骤:创建NSURL,通过NSURL创建NSURLRequest,建立NSURLConnection发送异步请求,
// 异步连接
/*
* 请求对像
* 该异步请求所在线程执行的操作队列
* 异步请求完后执行的代码块
*/
[NSURLConnection sendAsynchronousRequest:req queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{ //响应对象,接收到的数据,错误对象
dispatch_async(dispatch_get_main_queue(), ^{
self.img.image = [UIImage imageWithData:data];
});
遵守协议 < NSURLConnectionDataDelegate >
//获取服务器后调用一次
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{ //获取下载期望的整值
self.lenght = [response expectedContentLength];
}
//data参数就是每次获取的数据块
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.final appendData:data];
self.myProgress.progress = self.final.length/self.lenght;
self.myLabel.text = [NSString stringWithFormat:@"%.1f%%",self.myProgress.progress*100];
self.img.image = [UIImage imageWithData:self.final];
}
HTTP网络请求 :默认GET方式
GET是用来从服务器上获得数据(URL之后?各变量之间&),POST是用来上传数据
GET 操作简单,所有参数直接写到地址中
POST 操作复杂,将参数和地址分开来写
GET 请求安全性不如 POST 形式
GET 请求 URL 地址长度有限, POST 请求可以传递大量数据
eg:POST的设置
// 创建可变的网络请求对象
NSMutableURLRequest *req = [[NSMutableURLRequest alloc]initWithURL:url];
[req setHTTPMethod:@"post"];
NSString *avgs = [NSString stringWithFormat:@"name=艺煌&pass=23"];
NSData *data = [avgs dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPBody:data];
JSON简介:构造--字典{}和数组[]
eg: [{
"name" : " 张三 " , "age" : 18 ,
“bool”:true, "head" : " http://192.168.13.8/1.png " }]
注意: “健”:“对象”
JSON的解析
•常见的第三方类库有
SBJson:一个广泛被使用的基于类目的第三方类库,为NSString添加了方法,将字符串变为字典或数组形式
TouchJson:传入JSON的二进制数据然后对其进行解析
JSONKit:跟上面的TouchJson解析方式一致
eg:导入JSON类
NSDictionary * dict = [ NSJSONSerialization JSONObjectWithData :data options : kNilOptions error : nil ];
XML语言规范:XML声明,标记区分大小写,<>,
XML解析:
•解析 XML 通常有两种方式:DOM 和 SAX
– DOM 解析 XML 时,读入整个 XML 文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意 XML 节点,读取它的属性和值
– SAX 解析 XML ,是基于事件通知的模式,一边读取 XML 文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理
•iOS中自带XML解析类库为NSXMLParse是基于SAX的方式
eg: // 定义一个解析器
NSXMLParser * parser = [[NSXMLParser alloc]initWithData:data];
parser.delegate = self;
[parser parse];//开始解析
步骤: 导入GDataXMLNode.h和GDataCMLNode.m包,添加libxml2.dylib库。
eg:
// 获取文档对象
GDataXMLDocument * doc = [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil];
//获取根节点对象
GDataXMLElement * root = [doc rootElement];
//获取User节点
GDataXMLElement * user = [[root elementsForName:@"User"] objectAtIndex:0];
//取得User文本内容
NSString * userId = [[user attributeForName:@"id"]stringValue];
JSON和XML的区别:
可读性 JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
·可扩展性 XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
·编码难度 XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
·解码难度 XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
·流行度 XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了