1. 检测网络状态
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//获得网络检测结果
BOOL canConnectNetwork = [self isExistenceNetwork];
NSLog(@"Can connect network? --- %d",canConnectNetwork);
}
//检测网络状态
-(BOOL)isExistenceNetwork {
BOOL isExistenceNetwork;
//测试网络是否可以连接苹果官网.对于使用内购的朋友,可以用来检测是否可以连接苹果官网.
Reachability *r = [Reachability reachabilityWithHostName:@"http://www.apple.com"];
//对网络的连接状态进行遍历
switch ([r currentReachabilityStatus]) {
case NotReachable:
isExistenceNetwork = FALSE; //表示网络不可用的状态
break;
case ReachableViaWWAN:
isExistenceNetwork = TRUE; //表示当前网络通过2G或3G连接
case ReachableViaWiFi:
isExistenceNetwork = TRUE; //表示当前网络通过WiFi连接
default:
break;
}
return isExistenceNetwork;
}
2. 同步Get方式的网络请求
//建立一个网址对象,指定请求数据的网址
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
//通过网址,创建网络请求对象,Argument1:请求访问路径 Argument2:缓存协议 Argument3:网络请求超时
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//使用网络连接对象,实现网络通信,网络连接对象创建成功后,就创建一个网络连接对象
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//将返回的数据,转成字符串
NSString *str = [[NSString alloc] initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
3. 异步Get方式的网络请求
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//建立一个网址对象,指定请求数据的网址,本节将调用Facebook的公用应用程序接口,获得某个用户的信息.
NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/Apple-Inc"];
//通过网址创建网络请求对象,Argument1:请求访问路径,Arguments:缓存协议 Arguments: 网络请求超时时间.
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//使用网络请求对象实现网络通信,网络请求对象创建成功后,就创建了一个网络连接.
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
//添加一个代理方法,当接受到网络反馈时,执行这个方法
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(nonnull NSURLResponse *)response {
self.receiveData = [NSMutableData data];
}
//添加一个代理方法,当接受到网络数据时,执行这个方法
-(void)connection:(NSURLConnection *)connection didReceiveData:(nonnull NSData *)data {
self.receiveData = data;
}
............
4. 同步Post方式的网络请求
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//建立一个网址对象,指定请求数据的网址
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
//再通过网址创建网络请求对象.Argument1:请求访问路径 Argument2:缓存协议 Argument3:网络请求超时时间
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//设置网络通信方式为post,默认为GET.
[request setHTTPMethod:@"POST"];
//设置网络请求的参数
NSString *str = @"type=focus-c";
//将请求参数,转换为二进制数据
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//使用网络连接对象实现网络的通信,网络连接对象创建成功后,就创建了一个连接
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//将返回的数据转成字符串
NSString *str1 = [[NSString alloc] initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"%@",str1);
}
5. 异步Get、Post方式的网络请求
6. 下载并保存网络图片
7. PerformSelector消息处理方法
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
IOSApp *app = [[IOSApp alloc] init];
//@selector()可以理解成取类方法的编号,它的行为基本可以等同C语言的中函数指针.它的结果是一个SEL类型.
SEL method = @selector(printInformation);
//首先判断对象是否存在,以某个名称命名的方法
if ([app respondsToSelector:method]) {
[app performSelector:method];
}
//然后调用对象的制定方法,这种方法的调用方式,是由运行时系统,负责去找对应的方法,在编译时候不做任何校验.
SEL method2 = @selector(buyApp:);
//执行带有参数的方法,传递相关的参数
if ([app respondsToSelector:method2]) {
[app performSelector:method2 withObject:(@"Photoshop Interactive Turorials")];
}
//在执行某个方法时,可以增加延迟执行的功能
[app performSelector:method2 withObject:(@"Photoshop Interactive Turorials") afterDelay:2];
}
8. 使用谷歌地图
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self openMaps];
}
//打开谷歌地图
-(IBAction)openMaps{
//定义个字符串,作为谷歌地图的当前地理位置
NSString *addressText = @"Beijing";
//请求的网址路径中,如果包含中文的话,会出现请求不成功的情况,这时需要将中文参数转为美国标准信息交换代码.
addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
//定义一个完整的网址路径
NSString *urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];
NSLog(@"urlText================ %@",urlText);
//获取应用程序的单例对象,然后调用对象的打开网址方法,打开指定路径的网址.
// [[UIApplication sharedApplication] openURL:urlText];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]
}
9. 发送邮件
10. NSRLoop延迟动作
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CGRect rect = CGRectMake(100, 100, 100, 30);
UILabel *label = [[UILabel alloc] initWithFrame:rect];
[label setText:@"Waitting..."];
[label setTag:1];
[self.view addSubview:label];
//设置延迟1秒钟后,执行设定的方法.
[self performSelector:@selector(threadEvent) withObject:nil afterDelay:1.0f];
}
-(void)threadEvent {
//设置延迟2秒钟后,执行设定的方法.
[self performSelector:@selector(workInBackground) withObject:nil afterDelay:2.0f];
_stillLoading = true;
//是方法一直停留在本行,直到布尔值为假时,才跳转到下面的代码,以此实现线程的阻塞.
while (_stillLoading) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]] ;
}
//延迟2秒钟后,隐藏文字标签
[[self.view viewWithTag:1] setHidden:YES];
}
-(void)workInBackground {
//标志线程运行状态
NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>");
_stillLoading = false;
}
11. NSThread暂停动作
12. 使用多线程下载网络图片
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创建一个包含图片网络路径的字符串.
NSString *url = @"http://images.apple.com/v/creativity-apps/a/images/icon_mac_garageband_2x.jpg";
//使用分离新线程选择器方法,创建一个线程,用来执行下载图片的方法.
[NSThread detachNewThreadSelector:@selector(downloadImage:) toTarget:self withObject:url];
}
-(void)downloadImage:(NSString *)url {
//初始化加载状态和可变二进制数据对象.
_isLoaded = NO;
_bufferData = [NSMutableData data];
//清除网络返回的缓存
[[NSURLCache sharedURLCache] removeAllCachedResponses];
//建立网络请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
//建立网络请求的连接
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (connection != nil) {
while (!_isLoaded) {
//使方法一直停留在本行,直到布尔变量为假时,才跳到下面的代码,以此实现现成的阻塞
NSLog(@"Downloading........");
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
//跟新界面在主线程中,避免异常
//This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//将请求返回的数据,转换为UIImage对象.
UIImage *img = [UIImage imageWithData:_bufferData];
UIImageView *imgview = [[UIImageView alloc] initWithImage:img];
//设置图像视图的中心点坐标
[imgview setCenter:CGPointMake(150, 200)];
[self.view addSubview:imgview];
}];
//清除网络请求对象与网络连接对象
request = nil;
connection = nil;
}
//添加代理方法,处理网络连接缓存事件,这里选择不缓存
-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
return nil;
}
//添加一个代理方法,处理网络连接故障事件
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[self performSelectorOnMainThread:@selector(httpConnectEndWitnError) withObject:self waitUntilDone:NO];
[_bufferData setLength:0];
}
//添加一个代理方法,处理接受网络数据事件。将返回的数据存入可变二进制数据对象.
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_bufferData appendData:data];
}
//添加一个代理方法,处理网络联结结束事件
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
[self performSelectorOnMainThread:@selector(httpConnectedEnd) withObject:nil waitUntilDone:NO];
//修改状态为真,退出线程阻塞.
self.isLoaded = YES;
}
//处理网络结束事件
-(void)httpConnectedEnd {
NSLog(@"httpConnetend");
}
//处理网络故障事件
-(void)httpConnectEndWitnError {
NSLog(@"httpConnectEndWithError");
}
备注:如果你是iOS兴趣者或开发者,有兴趣的话可获得更多参考,以供学习交流。
内容知识点全面,释意详尽。有自写Code源码(免费+付费)。
学习交流联系方式:
邮箱:1983457078@qq.com
微信号:PureWind_jlk
iOS - 网络语线程(OC)的更多相关文章
-
iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
-
【转载】一步一步搭建自己的iOS网络请求库
一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...
-
【读书笔记】iOS网络-异步请求与运行循环
异步请求需要运行循环.当数据传递到服务器或是被客户端接收时,运行循环用于实现事件与委托对象之间的通信.异步请求在发出时,会在当前线程的运行循环上操作,这个实现细节是很重要的,因为在GCD块中或者是通过 ...
-
【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
-
【读书笔记】iOS网络-运行循环
运行循环是由类NSRunLoop表示的,有些线程可以让操作系统唤醒睡眠的线程以管理到来的事件,而运行循环则是这些线程的基本组件.运行循环是这样一种循环,可以在一个周期内调度任务并处理到来的事件.iOS ...
-
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...
-
对比iOS网络组件:AFNetworking VS ASIHTTPRequest
对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...
-
iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...
-
iOS下JS与OC互相调用(四)--JavaScriptCore
前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...
随机推荐
-
[ES] 安装
1.ElasticSearch安装的准备工作 Linux:CentOS6.4 Elasticsearc:elasticsearch-2.2.0 JDK:jdk-7u79-linux-x64 IK:1. ...
-
eclipse 字体、背景、自动提示设置
1 字体设置 点击最上面菜单栏的“Window”---“preferences”弹出属性界面 General--- Appearance---Colors and Fronts,找到Java 选择“ ...
-
MySQL启动错误排查
一般情况下mysql的启动错误还是很容易排查的,但是今天我们就来说一下不一般的情况.拿到一台服务器,安装完mysql后进行启动,启动错误如下: 有同学会说,哥们儿你是不是buffer pool设置太大 ...
-
SQL server performance - tempdb
When tempdb is used? User objects: User-defined tables and indexes System tables and indexes Global ...
-
[转]ASP.NET Session 详解
来源:http://www.webshu.net/jiaocheng/programme/ASPNET/200606/1381.html 阅读本文章之前的准备 阅读本文章前,需要读者对以下知识有所了解 ...
-
hdu 1299 Diophantus of Alexandria
1/x + 1/y = 1/n 1<=n<=10^9给你 n 求符合要求的x,y有多少对 x<=y// 首先 x>n 那么设 x=n+m 那么 1/y= 1/n - 1/(n+ ...
-
10.30 afternoon
P76竞赛时间: ????年??月??日??:??-??:?? 题目名称 他 她 它 名称 he she it 输入 he.in she.in it.in 输出 he.out she.out it.o ...
-
SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)
1.为实现二进制搜索算法,N位寄存器首先设置在中间刻度(即:100... .00,MSB设置为1).这样,DAC输出(VDAC)被设为VREF/2,VREF是提供给ADC的基准电压.然后,比较判断VI ...
-
python实现希尔排序(已编程实现)
希尔排序: 观察一下”插入排序“:其实不难发现她有个缺点: 如果当数据是”5, 4, 3, 2, 1“的时候,此时我们将“无序块”中的记录插入到“有序块”时,估计俺们要崩盘, 每次插入都要移动位置,此 ...
-
ACM Adding Reversed Numbers(summer2017)
The Antique Comedians of Malidinesia prefer comedies to tragedies. Unfortunately, most of the ancien ...