老谭笔记

报告一下NSURLConnection设计不够合理的接口

最先我称之为Bug,但其实苹果的文档已经说明了使用,但我仍然觉得这样的设计不够合理,因为在工作中遇上了,就随便帖出来算了。

1
2
3
4
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com/girl.png"]];
//startImmediately:NO设置不立即启动
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn start];

以上这句话在iOS5.0/Mac 10.7之前是会Crash的,应该修改为这样:

1
2
3
4
5
6
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com/girl.png"]];
//去掉了startImmediately的参数
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[conn start];

当然这个问题在ios5.0和10.7之后已经修正了,直接start会默认在当前的runloop中运行。