笔记1




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; 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值