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)的更多相关文章

  1. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  2. 【转载】一步一步搭建自己的iOS网络请求库

    一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...

  3. 【读书笔记】iOS网络-异步请求与运行循环

    异步请求需要运行循环.当数据传递到服务器或是被客户端接收时,运行循环用于实现事件与委托对象之间的通信.异步请求在发出时,会在当前线程的运行循环上操作,这个实现细节是很重要的,因为在GCD块中或者是通过 ...

  4. 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  5. 【读书笔记】iOS网络-运行循环

    运行循环是由类NSRunLoop表示的,有些线程可以让操作系统唤醒睡眠的线程以管理到来的事件,而运行循环则是这些线程的基本组件.运行循环是这样一种循环,可以在一个周期内调度任务并处理到来的事件.iOS ...

  6. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  7. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest

    对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...

  8. iOS网络编程笔记——Socket编程

    一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...

  9. iOS下JS与OC互相调用(四)--JavaScriptCore

    前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了.它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下, ...

随机推荐

  1. iOS 7 Pushing the Limits - Good & Bad Namings in Cocoa

    Cocoa is a dynamically typed language, and you can easily get confused about what type you are worki ...

  2. 企业应用架构模式阅读笔记 - Martin Fowler

    1. 数据读取

  3. TP复习7

    //编写search方法,实现搜索 public function search(){ //获取post的数据,根据数据组装查询的条件,根据条件从数据库中获取数据,返回给页面中遍历 if(isset( ...

  4. 云服务器 ECS Linux 修改编码格式

    https://help.aliyun.com/knowledge_detail/41424.html?spm=5176.7841174.2.19.Le8kvy 通常情况下,云服务器 ECS Linu ...

  5. 深入解析ext2文件系统之mke2fs

      上一遍博文的重点其实将ext2整体的组织框架,我们知道了ext2文件系统由块组组成,每个块组里面的组织形式.我们甚至直接把超级块和组描述符里面的内容,用十六进制形式展现了出来.这篇博文主要讲述如何 ...

  6. QT核心编程之调试技术 (g)

    Qt应用程序的调试可以通过DDD进行跟踪调试和打印各种调试或警告信息.DDD(Data Display Debugger)是使用gdb调试工具的图形工具,它安装在Linux操作系统中,使用方法可参考D ...

  7. 二手奢侈品电商Vestiaire Collective融资2000万美元

    巴黎奢侈品电商Vestiaire Collective获得了2000万美元的C轮融资,投资方包括知名出版集团Condé Nast.Idinvest.Balderton和Ventech,其中Condé ...

  8. 数据库实例创建好后,用plsql登录居然提示ora-12526监听程序:所有适用例程都处于受限模式的问题

    解决办法:以sys身份登录执行该语句:ALTER SYSTEM DISABLE RESTRICTED SESSION;

  9. 【转】Eclipse中一键调用javah生成jni的头文件

    这里定义了一个本地方法jni_test,该方法返回一个String.其中System.loadLibrary是用来加载本地库的(dll或者so). 有了这个类以后,就可以调用javac命令编译,得到E ...

  10. kindeditor在JavaWeb中的应用

    KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框textarea替换为可视化的富文本编辑 ...