初学者,看着官方教程做的,成功也是成功了。但是有点疑问,请各位大神指教。
官方教程的代码:-(void)doProcess{
NSString *urlString = @"https://api.weibo.com/2/statuses/public_timeline.json";
NSURL *url=[[NSURL alloc]initWithString:urlString];
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]init];
[request setURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(connection)
{
receiveData = [[NSMutableData data] retain];
NSLog(@"intial done!");
}
else
{
NSLog(@"sorry");
}
}问题1:
[[NSURLConnection alloc] initWithRequest:request delegate:self];这句话执行之后,应该是自动新开一个线程执行httprequest等操作,这里理应和主线程并行执行的。而假定doProcess函数是主线程的话,在if(connection)开始,另外一个线程已经在访问网络并下载数据了。而delegate中有对receiveData的操作。那么此时会不会出现receiveData还是nil的情况下就被下载线程使用的可能呢?问题2:
为什么用receiveData = [[NSMutableData data] retain];而不是receiveData = [[NSMutableData alloc]init];呢?
官方教程的代码:-(void)doProcess{
NSString *urlString = @"https://api.weibo.com/2/statuses/public_timeline.json";
NSURL *url=[[NSURL alloc]initWithString:urlString];
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]init];
[request setURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(connection)
{
receiveData = [[NSMutableData data] retain];
NSLog(@"intial done!");
}
else
{
NSLog(@"sorry");
}
}问题1:
[[NSURLConnection alloc] initWithRequest:request delegate:self];这句话执行之后,应该是自动新开一个线程执行httprequest等操作,这里理应和主线程并行执行的。而假定doProcess函数是主线程的话,在if(connection)开始,另外一个线程已经在访问网络并下载数据了。而delegate中有对receiveData的操作。那么此时会不会出现receiveData还是nil的情况下就被下载线程使用的可能呢?问题2:
为什么用receiveData = [[NSMutableData data] retain];而不是receiveData = [[NSMutableData alloc]init];呢?
解决方案 »
- iphone多视图开发的问题
- app在运行过程中隐藏状态栏但存在了黑影该怎么去除??
- 郁闷 UsingNSURLConnection connectionDidFinishLoading
- IPhone中如何播放内存中的PCM音频数据?
- 求一个类似QQ截图的一个oc程序
- 将siphon 中的代码整合到我的工程里面
- xib文件里的view不显示,却显示黑屏
- 关于ios 开发中nib文件的使用场景
- 想让程序启动的图片[email protected],停留5秒后再进入主程序,这应该怎样操作啊?先感谢了!
- 刚买的MAC mini 连接显示器,却没有任何显示
- 新手发布应用到appstore的签名 问题 高分求大侠帮忙
- 有谁用过JAVAPNS来编写服务器端连接apns没?
多线程操作同一块数据,看你有没有做线程保护问题2NSMutableData 的类方法data直接可以取,只需要retain加1,保证到时正确回收,而每次 alloc 的话 开销很大啊
2.receiveData 的初始化,receiveData = [[NSMutableData data] retain]是静态方法,系统会自动回收,而且alloc出来,是要手动释放掉。alloc的效果和retain的结果,其实是差不多的,retaincount也是相同的。至于ls说的,开销很大,receiveData只有被创建一次,没有开销很大的可能。我感觉。