iOS疯狂详解之NSURLSession使用

iOS/macOS CocoaAsyncSocket TLS/SSL加密通信实战与深度排错指南 TLS/SSL协议是保障网络通信安全的基石,它通过非对称加密、对称加密和数字证书等技术,构建了身份认证、密钥协商和数据加密的完整体系。在工程实践中,为Socket连接启用TLS/SSL,能有效防止数据窃听和中间人攻击,是金融、社交等高安全要求应用的标配。对于iOS/macOS开发者,CocoaAsyncSocket是构建高效异步网络层的常用库,但其TLS配置涉及证书验证、协议版本和加密套件等复杂细节,常因配置不当引发“ssl certificate problem: unable to get local 阅读详情
//
//  ViewController.m
//  NSURLSession
//
//  Created by long on 15/9/11.
//  Copyright (c) 2015年 WLong. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property(nonatomic,retain)NSMutableData *receiveData;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

//所有类型的task都要调用resume方法才会开始请求

- (IBAction)BlockButton:(id)sender {
    //快捷方式获得session对象
    NSURLSession *session = [NSURLSession sharedSession];
    NSURL *url = [NSURL URLWithString:@"http://mobile.ximalaya.com/m/explore_album_list?category_name=all&condition=hot&device=android&page=1&per_page=20&status=0&tag_name=%E5%8D%81%E4%BA%8C%E6%98%9F%E5%BA%A7"];
    
    //通过URL初始化task 在block内部可以直接对返回的数据进行处理
    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        
        NSLog(@"-----%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"result = %@",result);
    }];
    //启动任务
    [task resume];
}



//NSURLSessionDataDelegate代理方法
//NSURLSession提供了block方式处理返回数据的简便方式,但如果想要在接收数据过程中做进一步的处理,仍然可以调用相关的协议方法.NSURLSession的代理方法和NSURLConnection有些类似,都是分为接收响应、接收数据、请求完成几个阶段.

- (IBAction)DelegateButton:(id)sender {
    //使用代理方法我们需要设置代理,但是session得delegate属性是只读的,要想设置代理只能通过这种方式创建session
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    //创建任务(因为要使用代理方法,就不需要block方式初始化)
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=15&udid=1234567890&terminalType=Iphone&cid=213"]]];
    
    //启动任务
    [task resume];
}
//代理方法:
//1.接收服务器响应
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    //允许处理服务器的响应,才会继续接收服务器返回的数据,NSURLSession在接收到响应的时候要先对响应做允许处理:completionHandler(NSURLSessionResponseAllow);,才会继续接收服务器返回的数据,进入后面的代理方法
    completionHandler(NSURLSessionResponseAllow);
    
    //当网络请求是基于http协议时(url以http开头),response本质就是NSHTTPURLResponse类型的
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        
    NSLog(@"status code = %ld",httpResponse.statusCode);
    NSLog(@"all header fields = %@",httpResponse.allHeaderFields);
    
    //创建空的可变的data,准备接收服务器传回的data片段
    self.receiveData = [NSMutableData dataWithCapacity:40];
}

//2.接收服务器的数据(可能调用多次)
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    //处理每次接收的数据
    //将每次接收到得data片段,拼接到receiveData中
    [_receiveData appendData:data];

}

//3.请求成功或者失败(如果失败 error有值)
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
//请求完成,成功或者失败的处理
    NSString *result = [[NSString alloc] initWithData:_receiveData encoding:NSUTF8StringEncoding];
    NSLog(@"result = %@",result);

}




- (IBAction)GetButton:(id)sender {
    
}




//POST和GET的区别就在于request,所以使用session的POST请求和GET过程是一样的,区别就在于对request的处理.
- (IBAction)PostButton:(id)sender {
    
    
    
    NSURL *url= [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=15&udid=1234567890&terminalType=Iphone&cid=213"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"username=daka&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
    NSURLSession *session = [NSURLSession sharedSession];
    //由于要先对request先进行处理,我们通过request初始化task
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"result = %@",result);
    }];
    //启动任务
    [task resume];

}





- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

迅雷校招iOS笔试复盘:从OC底层到Runtime的备考指南 在iOS开发岗位的校招笔试中,Objective-C语言特性、内存管理机制与Runtime底层原理始终是区分候选人的核心考点。理解对象本质、isa指针、消息传递流程,掌握copy/strong/weak/assign的选择,以及block循环引用的规避方法,是应对选择题和设计题的基础。这些知识不仅服务于笔试,更直接关系到日常工程中内存优化、崩溃排查与性能调优。从消息转发到KVO实现,从关联对象到方法交换,底层原理的价值在于帮助开发者建立系统性的问题分析能力。无论你正在准备互联网公司的校园招聘,还是希望夯实i 阅读详情

相关推荐

iOS疯狂详解之SQlite数据库增删改查

// // SqLiteManager.h // MySqlite // // Created by long on 15/9/15. // Copyright (c) 2015年 WLong. All rights reserved. // #import #import "LanOuStudent.h" #import @interface SqLiteManager : NSO

wangLongBlog的专栏 5930

iOS NSURLSession的简单使用

一.为什么要使用NSURLSession来替换NSURLConnection 1.在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作。 2.NSURLSession的优势: NSURLSession支持http2.0协议 处理下载任务的时候可以直接把数据下载到磁盘中 支持后台下载和上传 同一个session发送多次请求,只需要建立一次连接(复用了TCP) 提供了全局的session并且可以统一配置,

假装你是大灰狼的专栏 1718

PCB布局布线要求及多层电路板叠加原则

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考本文主要针对PCB布局布线中的要点进行了总结,并对多层电路板的叠加原则进行了解释。

Ka_wyb的博客 2932

【iOS】使用NSURLSession网络请求

文章目录前言NSURLSessionNSURLSession替换NSURLConnectionGet请求流程1. 确定请求路径2. 创建请求对象3. 获得会话对象3. 根据会话对象创建一个Task(发送请求)5. 解析服务器返回的数据6. 执行任务Post请求流程修改请求方法为POST设置请求体Get与Post请求比较info.plist文件配置遇到的问题 前言 最近写项目开始和后台对接了,测试接口需要用到网络请求相关知识,才能和后台进行交互。 暂时学习了使用NSURLSession(现在流行的苹果网络框

kochunk1t的博客 1922

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 426

MATLAB 设置legend加标题

x1 = linspace(0,5); y1 = sin(x1/2); plot(x1,y1) hold on x2 = [0 1 2 3 4 5]; y2 = [0.2 0.3 0.6 1 0.7 0.6]; scatter(x2,y2,'filled') hold off legend({'sin(x/2)','2016'},'Location','northwest','Orientation','horizontal')%水平 legend添加标题 lgd = legend; lgd.Fon

早起CaiCai的学习空间 4713

iOS 使用 NSURLSession 常用的提交数据的方式

#import <Foundation/Foundation.h> dispatch_semaphore_t sema = dispatch_semaphore_create(0); NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://i...

oZhaiHenZhai的博客 800

2025软考信息安全工程师真题

2025信息安全工程师软考真题

qq_40424393的博客 1706

IOS网络基础学习二:NSURLSession发送GET与POST请求,DataTask代理方法

文章目录使用步骤GET 使用步骤 1.创建NSURLSession的会话 2.根据会话创建Task 3.执行Task Task的类型 NSURLSessionTask是一个抽象类,我们无法直接运用到它,运用到的是它的三个子类。 如何获取NSURLSession? 1.获得共享的Session +(NSURLSession*)sharedSession; 2.自定义的Session +(NSURL...

煮酒Shae 3453

计算机网络(国家电网)

1.局域网中NOS(网络操作系统)提供的通信服务有工作站与工作站之间的对等通信,工作站与服务器之间的通信2.ISP:Internet服务商应用层 APDU(应用层协议数据单元)表示层 PPDU(表示层协议数据单元)会话层 SPDU(会话层协议数据单元)传输层 segment(报文段)网络层 packet (数据包)数据链路层 frame(数据帧)物理层 bit (比特)4.

qq_31715647的博客 3183

Claude Code 处理长任务 + Cursor 专注交互:双栈协作的 3 种分工场景与响应提速 35% 实测

揭示 Claude Code 与 Cursor 在 AI 编程中的本质分工:Claude Code 作为离线式架构师处理跨文件、带约束的长链路重构(如单体拆微服务),Cursor 作为现场交互工程师专注秒级局部编辑;提出按任务切片动态切换的三种工程化协作场景,并给出结构化上下文构建、约束型 Prom

weixin_28728443的博客 122

iOS网络编程—NSURLSession的简单使用(iOS9)

摘要: 在iOS7之后,NSURLSession被作为推荐使用的网络开发框架,其相比NSURLConnection最大的优势在于其后台处理的能力。一、NSURLSession简介在iOS7之后,NSURLSession作为系统推荐使用的HTTP请求框架,在进行前台请求的情况下,NSURLSession与NSURLConnection并无太大差异,对于后台的请求,NSURLSession更加灵活的优势

极客学伟的技术分享社区 1623

TVBox源总失效?不如自己搭建一个!告别不稳定!手把手教你自建TVBox源,全网资源尽掌握!

🚀 TVBox源总失效?别慌!手把手教你自建TVBox源,打造一个稳定、海量、无广告的影视宝库!从此告别片荒,尽享丝滑观影体验!

XiaoqiangClub的博客 5438

华山论剑之浅谈iOS的文件下载,断点下载(基于NSURLSession的网络请求)

疯狂的程序员决不是靠狂妄和拼命的程序员,而是能够脚踏实地,持续努力的程序员,一个程序员真正做到这两点,技术上去后,唯一能限制他的只有想象力,到那个时候才算“疯狂的程序员”,这种程序员,才能令对手无比恐惧。 前言 上面的一张水域小镇风景图是那么的美丽,美丽的东西总是令人向往.现在我想它从网上下载下来当我的手机桌面的背景图,那么该怎么办?如果图片的很小,我们该如何做,如果图片过大我们又该如何处理呢?或者说是当我们需要下载一个几百兆的文件的时候,我们改如何处理呢? ####文件的一次性下载 做应用程.

得不到的永远是骚栋. 384

MIPI D-PHY TX 一致性测试实例解析 Part 03

本文之前,已经讨论了MIPI D-PHY TX的1.3.x和1.4.x的测试项,1.5.x的测试项相对较少,主要是用于时钟和数据通道相关的时序测量

一只豌豆象的博客 5184

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从欢聚时代iOS校招C卷看Objective-C与Runtime核心考点

在iOS开发中,Objective-C和Runtime是绕不开的底层基石,更是校招与社招面试中高频考察的技术栈。理解内存管理、引用计数、消息转发与RunLoop机制,不仅有助于分析属性关键字、block循环引用等经典问题,也能为多线程并发和性能优化提供扎实的理论支撑。从直播、IM等高实时互动场景到列表流畅度优化,这些原理始终贯穿于工程实践。本文通过复盘一份2017年欢聚时代iOS工程师校招笔试卷,梳理其题型结构与出题逻辑,提炼出依然适用于当今面试的常青知识点,帮助开发者建立系统化的底层认知,从而在技术面试与

weixin_33796177的博客 307

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IOS网络开发NSURLSession详解(一)概述

原创blog,转载请注明出处blog.youkuaiyun.com/hello_hwc 我的IOS-SDK详解专栏,欢迎关注 http://blog.youkuaiyun.com/column/details/huangwenchen-ios-sdk.html前言: 这个IOS网络编程的系列计划6篇文章,NSURLSession3篇(一篇概述,一篇详细阐述三种task和delegate的使用,一篇阐述授权,证书等内

Leo的专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS—NSURLSession简单使用

文章目录NSURLSession使用 NSURLSession,苹果对它的定位是作为NSURLConnection的替代者 NSURLSession只提供了异步请求方式而没有提供同步请求方式 NSURLSession使用

qq_45836906的博客 1002

NSURLSession简介(NSURLSession使用说明及后台工作流程分析)

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。   NSURLSession提供的功能: 1.通过URL将数据下载到内存 2.通过URL将数据下载到文件系统 3

xushuxuan 1292

获取当前时间警告eprecated in iOS 9.0 - Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLS

//警告 NSUInteger unitFlags = kCFCalendarUnitYear | kCFCalendarUnitMonth | kCFCalendarUnitDay | kCFCalendarUnitHour |  kCFCalendarUnitMinute | kCFCalendarUnitSecond;  //替换   NSUIntege

YST的博客 2965

iOS网络(四):NSURLSession的使用,断点下载,离线断点续传,上传文件

NSURLSession 使用步骤 使用NSURLSession对象创建Task,然后执行Task Task的类型 NSURLSession的基本使用步骤代码: #import "ViewController.h" @interface ViewController () @end @implementation ViewController -(void)to...

weixin_42433480的博客 880

使用NSURLSessionDataTask发送get和post请求

NSURLSessionDataTask是iOS7以后才会有的,取代NSURLConnection 参考:http://blog.youkuaiyun.com/ttf1993/article/details/46491113 1.基本使用 //GET请求(默认) //创建session对象 NSURLSession *session = [NSURLSession sharedSess

QueenlySun的博客 4423

【iOS开发-网络】使用NSURLSessionDataTask发送get和post请求

NSURLSessionDataTask是iOS7以后才会有的,是苹果为取代NSURLConnection所出get请求//得到session对象 NSURLSession *session = [NSURLSession sharedSession]; NSURL *url = [NSURL URLWithString:@"http://localhost:8080/TFServer/video"

沸沸腾的专栏 7011

iOS网络--NSURLSession基本使用(1)

一、NSURLSession NSURLSession是苹果对网络会话的封装,可以完全替代原来的NSURLConnection。相比于NSURLConnection,NSURLSession具备以下优势: 支持http2.0协议 在处理下载任务的时候可以将下载内容写入磁盘(NSURLSessionDownloadTask) 支持后台下载/上传 同一个NSURLSession可以发送多个请...

qq_41856760的博客 581

iOS疯狂详解之开源库

youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配置:https://github.com/spf13/spf13-vim ----------------Mac完整项目---------- 电台:https://github.com

wangLongBlog的专栏 5236

iOS疯狂详解之设备前后摄像头切换

#import   // Switching between front and back cameras   - (AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position { NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMedi

wangLongBlog的专栏 4033
上一篇: iOS疯狂详解之iOS9 HTTP 不能正常使用的解决办法
下一篇: iOS疯狂详解之NSFileHandle
吊炸天-狂人
博客等级 码龄12年 87粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值