NSURL *url = [ NSURL URLWithString:@“远程地址”];
NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *url = [NSURL URLWithString:@“远程地址”];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString经常用于获取文本内容,NSData经常用于二进制内容(图片,音频等)
使用Reachability来实现网络检测
网络连接类型
ios进行网络连接时有两张方式,同步连接和异步连接
同步连接,发送同步请求则停止用户交互,知道服务器返回数据;
异步连接时,一面界面不会停止用户交互,程序继续响应用户操作
连接:
NSString *path = @“资源地址”;
NSURL *url = [[NSURL alloc]initWithString:path];
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
同步:
NSURLResponse *response = nil;
NSError *error = nil;
NSData *receiveData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//执行下面的前提是前面的连接请求必须完成
UIImage *image = [UIImage imageWithData:receiveData];
异步:
/*
第一参数为请求对象
第二为异步请求所在线程执行的操作队列
第三为异步请求完成后执行的代码段
*/
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init]completionHandler:
^(NSURLResponse *response,NSData *data,NSError *error)
{
//异步请求完成,取得响应的数据
//代码段第一个参数为响应对象,第二个为接收到的数据,第三为错误对象
UIImage *image = [UIImage imageWithData : data];
}
//后面的代码不会等待请求完成才执行
HTTP网络请求类型
GET POST( PUT DELETE )
get 和post 请求方式的区别
1.GET 是用来从服务器上获得数据,而POST是用来想服务器上传递数据
2.GET将表单中数据的按照 variable = value 的形式 ,添加到所请求连接的URL后面,与URL之间用“?”连接,各个变量之间用”&”连接’
POST是将变量和值相对应然后附加到请求体中,传递到请求连接的URL;
3.GET不安全,POST是将数据附加到请求体,所有操作对用户来讲是不可见的
4.GET传输数据小(主要受URL长度限制)POST可以传输大量数据,所以在上传文件只能使用POST方式请求
5.GET一般限制数据的编码必须为ASCII字符,POST支持整个ISO10646字符集
XML解析
XML解析一般分为两种方式进行解析,一种是基于DOM的解析方式,一种是基于SAX。
DOM 解析XML时,读入整个XML文档并构建iGetter驻留内存的树结构(节点树)通过便利树结构可检索任意XML节点,读取他爹属性和值
SAX 基于事件通知模式,一边读取XML文档一边处理,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理,ios自带XML解析类库NSXMLParse基于SAX的,
SAX(一般解析大量数据)事实上,手机开发中不会有太大量的数据进行处理,使用DOM方式可能更加好的理解,逻辑控制上更清晰
NSString 常用方法总结
+(id)stringWithContentsOfFile:path encoding:enc err | 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 |
+(id)stringWithContentsOfURL:url encoding:enc err | 创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误 |
+(id)string | 创建一个新的空字符串 |
+(id)stringWithString:nsstring | 创建一个新字符串,将其内容设置为 nsstring 内容 |
-(id)initWithString:nsstring | 将字符串内容设置为 nsstring 内容 |
-(id)initWithContentsOfFile:path encoding:enc error:err | 将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 |
-(id)initWithContentsOfURL:url encoding:enc error:err | 将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误 |
-(UNSigned int)length | 返回字符串中字符数目 |
-(unichar)characterAtindex:i | 返回索引i 所在UniCode 字符 |
-(NSString*)substringFromIndex:i | 返回从索引 i 开始到结尾的子字符串 |
-(NSString*)substringWithRange:range | 根据指定范围返回子字符串 |
-(NSString*)substringToIndex:i | 返回从字符串开始到 索引 i 的子字符串 |
-(NSComparator*)caseInsensitiveCompare:nsstring | 比较两个字符串大小,忽略大小写 |
-(NSComparator*)compare:nsstring | 比较两个字符串大小 |
-(BOOL)hasPrefix:nsstring | 测试字符串是否以 nsstring 开始 |
-(BOOL)hasSuffix:nsstring | 测试字符串是否以 nsstring 结尾 |
-(BOOL)isEqualToString:nsstring | 测试两个字符串是否相等 |
-(NSString*)capitalizedString | 返回字符串,串中的每个单词的首字母大写,其余字母小写 |
-(NSString*)lowercaseString | 返回转换为小写的字符串 |
-(NSString*)uppercaseString | 返回转换为大写的字符串 |
-(const char*)UTF8String | 返回UTF8编码格式的字符串 |
-(double)doubleValue | 返回转换为double 类型的字符串 |
-(float)floatValue | 返回转换为 float 类型的字符串 |
-(NSInteger)integerValue | 返回转换为 NSInteger 类型的新字符串 |
-(int)intvalue | 返回转换为 int 的字符串 |
NSMutableString 可修改字符串常用方法 +(id)stringWithCapacity:size |
创建一个字符串,容量为size大小 |
-(id)initWithCapacity:size | 初始化一个字符串,容量为size |
-(void)setString:nsstring | 将字符串设置为 nsstring |
-(void)appendString:nsstring | 在字符串末尾追加字符串 nsstring |
-(void)deleteCharatersInRange:range | 删除指定range 中的字符 |
-(void)insertString:nsstring atIndex:i | 以索引 i 为起始位置插入 nsstring |
-(void)replaceCharatersInRange;range withString:nsstring | 使用 nsstring 替换 range 指定的字符 |
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range | 根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring |
KVC\KVO的使用方法
1、添加Student学生类。
.h
[cpp]
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *name;
NSString *courseName;
}
-(void)changeCourseName:(NSString*) newCourseName;
@end
类中有name,和课程名称courseName,添加一个可以改变课程名称的方法changeCourseName。一会用来做对比,看直接改变课程名称时会不会有回调。
实现文件.m
[cpp]
#import "Student.h"
@implementation Student
-(void)changeCourseName:(NSString*) newCourseName
{
courseName = newCourseName;
}
@end
实现类把方法实现了。
2、页面类实现
.h文件
[cpp]
#import <Foundation/Foundation.h>
@class Student;
@interface PageView : NSObject
{
Student *student;
}
-(id)init:(Student*)initStudent;
@end
.m文件
[cpp]
#import "PageView.h"
#import "Student.h"
@implementation PageView
-(id)init:(Student*)initStudent
{
if (self = [super init]) {
student = initStudent;
[student addObserver:self
forKeyPath:@"courseName"
options:NSKeyValueObservingOptionOld
|NSKeyValueObservingOptionNew context:nil];
}
return self;
}
- (void) dealloc{
[student removeObserver:self forKeyPath:@"courseName" context:nil];
[super dealloc];
}
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqual:@"courseName"]) {
NSLog(@"PageView课程被改变了");
NSLog(@"PageView新课程是:%@ 老课程是:%@", [change objectForKey:@"new"],[change objectForKey:@"old"]);
}
}
@end
init初始化时,向student实例添加观察者,在释放的时候移除观察者。
3、实现观察
在main函数中
[cpp]
#import "Student.h"
#import "Course.h"
#import "PageView.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student *student = [[[Student alloc]init]autorelease];
[student changeCourseName:@"数学课"];
NSLog(@"初始值:%@", [student valueForKey:@"courseName"]);
//创建页面实例
PageView *pageview = [[[PageView alloc]init:student]autorelease];
[student setValue:@"化学课" forKey:@"courseName"];
}
return 0;
}
新建一个student的实例,设置他的课程是数学课,然后创建页面类的时候,用student初始化。这是页面类已经观察着学生的课程了。
再给课程设置新的值为化学课。这时候运行打印结果:
2012-07-24 16:29:21.561 objectiveC[2192:403] 初始值:数学课
2012-07-24 16:29:21.565 objectiveC[2192:403] PageView课程被改变了
2012-07-24 16:29:21.566 objectiveC[2192:403] PageView新课程是:化学课老课程是:数学课
可以看到Pageview类中的回调被调用,Pageview接收到学生课程数据更新的信息。
4、直接改变课程信息对比
[cpp]
#import "Student.h"
#import "Course.h"
#import "PageView.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student *student = [[[Student alloc]init]autorelease];
[student changeCourseName:@"数学课"];
NSLog(@"初始值:%@", [student valueForKey:@"courseName"]);
//创建页面实例
PageView *pageview = [[[PageView alloc]init:student]autorelease];
[student setValue:@"化学课" forKey:@"courseName"];
[student changeCourseName:@"英语课"];
NSLog(@"直接改变的课程为:%@", [student valueForKey:@"courseName"]);
}
return 0;
}