
多线程网络
iOS开发疯狂者
这个作者很懒,什么都没留下…
展开
-
HTTPS请求代码演练
具体使用代理(不使用框架)1.确定URLNSURL *url = [NSURL URLWithString:@"https://......"];2.创建请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.创建会话对象(自定义),设置代理NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfigura原创 2020-05-10 09:51:20 · 240 阅读 · 0 评论 -
数据安全简单说明
提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的说有参数都直接暴漏在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一用户的隐私数据登录密码银行账号数据安全仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交常见的加密算法MD5\SHA\DES\3DE原创 2020-05-10 09:50:56 · 312 阅读 · 0 评论 -
AFN(向网络发送请求---文件上传)
基本使用GET请求1.创建会话管理者AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; NSDictionary *paramDict = @{ };2.发送GET请求/*第一个参数:请求路径(不包含参数),NSString类型第二个参数:字典(发送给服务器的数据~参数)第三个参数:progress 进度回调第四个参数:success 成功回调task:请求任务respons原创 2020-05-10 09:48:40 · 973 阅读 · 0 评论 -
UIWebView
简单介绍什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件html\htmpdf,doc,ppt,txtmp4UIWebView常用的加载资源的方法-(void)loadRequest:(NSURLRequest *)request;常用属性和方法重新加载(刷新)-(void)reload;停止加载- (void原创 2020-05-10 09:47:54 · 1380 阅读 · 0 评论 -
NSURLSession配置简单说明
+ (NSURLSessionConfiguration *)defaultSessionConfiguration;//返回标准配置,这实际上与NSURLConnection的网络协议栈是一样的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage。+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;//返回一个预设配置,没有持久性存储的缓存,Cook原创 2020-05-10 09:46:26 · 512 阅读 · 0 评论 -
NSURLSessionDataTask 离线断点下载
0.遵守协议<NSURLSessionDataDelegate>属性/** 沙盒地址 */@property(nonatomic,strong) NSString fullPath;/ 数据总大小 /@property(nonatomic,assign) NSInteger totalSize;/ 当前数据大小 /@property(nonatomic,assign) NSInteger currentSize;/ 文件句柄 */@property(nonatomic,原创 2020-05-10 09:45:54 · 198 阅读 · 0 评论 -
NSURLSessionDataTask 大文件下载---delegate(最常使用)
0.遵守协议<NSURLSessionDataDelegate>1.确定URL NSURL *url = [NSURL URLWithString:@""]; 2.创建请求对象 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.创建会话对象(自定义),设置代理 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSUR原创 2020-05-10 09:45:14 · 321 阅读 · 0 评论 -
NSURLSessionDownloadTask (开始,暂停,继续,取消下载)
这里面使用代理的方法发送请求@property(nonatomic,strong) NSURLSessionDownloadTask *downTask;@property(nonatomic,strong) NSData *resumData;开始下载1.确定URLNSURL *url = [NSURL URLWithString:@""];2.创建请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3原创 2020-05-10 09:44:04 · 1750 阅读 · 0 评论 -
NSURLSessionDownloadTask(大文件下载---delete)
具体使用1.确定URLNSURL *url = [NSURL URLWithString:@""];2.创建请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.创建会话对象(自定义),设置代理NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfi原创 2020-05-09 08:03:11 · 220 阅读 · 0 评论 -
NSURLSessionDownloadTask(大文件下载---block)
优缺点优点:不需要担心内存(一边下载一边存入沙盒)缺点:无法监听文件下载具体使用1.确定URL NSURL *url = [NSURL URLWithString:@""]; 2.创建请求对象 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.创建会话对象 NSURLSession *session = [NSURLSession sharedSession];4.创建Task第一个参数:请求对象原创 2020-05-09 08:02:30 · 375 阅读 · 0 评论 -
NSURLSession(发送请求)(最常使用)
基本使用获得NSURLSession获得共享的Session+ (NSURLSession *)sharedSession;自定义Session+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id<NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)que原创 2020-05-09 08:02:06 · 608 阅读 · 0 评论 -
文件的压缩和解压缩
我们需要使用一个第三方框架实现(ZipArchive)在使用的时候我们需要添加一个库(libz)1.包含头文件#import "SSZipArchive.h"压缩文件方法一第一个参数:压缩文件的存放位置第二个参数:要压缩那些文件(路径),这里面是一个数组,数组当中都是我们需要压缩文件路径* 创建数组NSArray *arrayM = @[@"";@""];[SSZipArchive createZipFileAtPath:@"......./Test.zip" withF.原创 2020-05-09 08:01:00 · 230 阅读 · 0 评论 -
获得文件的MIMEType
MIMEType:上传文件的文件类型是什么(Content-Type: image/ie d##### MIMEType:上传文件的文件类型是什么(Content-Type: image/可低啊png)1.发送请求,可以响应头(内部有MIMEType) //1.确定url NSURL *url = [NSURL fileURLWithPath:@""]; //2.创建请求对象 NSURLRequest *request = [[NSURLRequest alloc] initWi原创 2020-05-09 07:59:52 · 206 阅读 · 0 评论 -
NSURLConnection实现文件上传
1.设置请求头Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjv0UfA04ED44AhWx2.按照固定的格式去拼接请求体的数据------WebKitFormBoundaryjv0UfA04ED44AhWxContent-Disposition: form-data; name=“file”; filename=“Snip20160225_341.png”Content-Type: image/png-----原创 2020-05-09 07:59:24 · 255 阅读 · 0 评论 -
输出流(下载大文件)
1.确定URL路径 NSURL *url = [NSURL URLWithString:@""];2.根据URL创建请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.发送请求(代理方法实现下载文件) [[NSURLConnection alooc] initWithRequest:request delegate:self];4.实现代理方法(直接将文件写在沙盒里)/** 沙盒地址 */@prope原创 2020-05-09 07:58:44 · 275 阅读 · 0 评论 -
NSURLConnection实现大文件下载
1.确定URL路径 NSURL *url = [NSURL URLWithString:@""];2.根据URL创建请求对象NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];3.发送请求(代理方法实现下载文件) [[NSURLConnection alooc] initWithRequest:request delegate:self];4.实现代理方法(直接将文件写在沙盒里)/** 沙盒地址 */@prope原创 2020-05-09 07:58:17 · 169 阅读 · 0 评论 -
控制字典的输出(汉字的解析)
通过这个修改,我们可以控制字典的输出格式(修改的是系统的方法)在解析文件的时候,有些时候里面有一些汉字,解析出来之后是乱码,我们修改字典的内部方法,让汉字也可以解析出来需要给字典进行一个分类,修改方法//重写系统方法控制输出-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level{ NSMutableString *string = [NSMutableString string]; //{}原创 2020-05-09 07:57:39 · 174 阅读 · 0 评论 -
XML解析
NSXMLParser方式1.遵守代理:2.解析数据[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //2.1创建XML解析器:S原创 2020-05-09 07:57:09 · 92 阅读 · 0 评论 -
XML
语法一个常见的XML文档一般由以下部分组成文档声明元素(Element)属性(Attribute)文档声明在XMl文档的最前面,必须编写一个文档声明,用来声明XML文档的类型最简单的声明<?xml version="1.0" ?>用encoding属性说明文档的字符编码<?xml version="1.0" encoding="UTF-8" ?>元素(Element)一个元素包括了开始标签和结束标签拥有内容的元素:小黄人没有内容的元素:没有原创 2020-05-09 07:56:34 · 140 阅读 · 0 评论 -
播放视频
1.包含头文件#import <MediaPlayer/MediaPlayer.h>2.创建播放器MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:urlStr]];3.弹出控制器[self prese...原创 2020-05-08 13:23:27 · 141 阅读 · 0 评论 -
JSON解析
在iOS中,JSON的常见解析方案有4种第三方框架:JSONKit , SBJson , TouchJSON(性能从左到右,越差)苹果原生(自带):NSJSONSerialization(性能最好)NSJSONSerialization的常见方法JSON数据—>OC对象第一个参数:JSON的二进制数据第二个参数:NSJSONReadingMutableContainers ...原创 2020-05-08 13:22:56 · 299 阅读 · 0 评论 -
NSURLConnection(发送请求)
常用类NSURL:请求地址NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有一个NSURL对象请求方法、请求头、请求体请求超时NSMutableURLRequest:NSURLRequest的子类NSURLConnection负责发送请求,建立客户端和服务器的连接发送数据给服务器,并收集来自服务器的响应数据使用步骤1.创建一个NSUR...原创 2020-05-08 13:22:25 · 391 阅读 · 0 评论 -
网络
基本概念客户端(Client):移动应用(iOS、android等应用)服务器(Server):为客户端提供服务、提供数据、提供资源的机器请求(Request):客户端向服务器索取数据的一种行为响应(Response):服务器对客户端作出的反应,一般指返回数据给客户端客户端通过网络向服务器发送一个请求,目的是向服务器索要资源(数据)服务器对客户端的请求作出响应,返回客户端想要的资源(...原创 2020-05-08 13:21:53 · 96 阅读 · 0 评论 -
NSOperation操作依赖和监听
操作依赖我们想让任务3执行完执行任务2,任务2执行完执行任务4,任务4执行完执行任务1任务2依赖于任务3 任务4依赖于任务2 任务1依赖于任务4//创建队列NSOperationQueue *queue = [[NSOperationQueue alloc] init];//创建任务NSBlockOperation *op1 = [NSBlockOperat...原创 2020-05-07 20:30:20 · 338 阅读 · 0 评论 -
NSOperation其他用法
最大并发数1.创建队列NSOperationQueue *queue = [[NSOperationQueue alloc] init];2.设置最大并发数量 maxConcurrentOperationCount//同一时间最多有多少个任务可以执行//串行执行任务!=只开一条线程(线程同步)maxConcurrentOperationCount > 1 并发队列maxCon...原创 2020-05-07 20:29:48 · 143 阅读 · 0 评论 -
自定义NSOperation
我们创建一个类,继承NSOperation之后我们需要在类的.m文件中重写main方法- (void) main{ <写上我们需要执行的操作>}在我们用这个类创建对象的时候直接创建对象,将对象放在队列中执行任务即可(类名:HTOperation)HTOperation *op1 = [[HTOperation alloc] init];//创建队列NSOperati...原创 2020-05-07 20:29:14 · 106 阅读 · 0 评论 -
NSOperation(线程)
简介NSOperation作用NSOperation和NSOperationQueue也能实现多线程编程NSOperation和NSOperationQueue实现多线程的具体步骤先将需要执行的操作封装到一个NSOperation对象中然后将NSOperation对象添加到NSOperationQueue中将取出的NSOperation封装的操作放到一条新线程中执行NSOpera...原创 2020-05-07 20:28:44 · 2456 阅读 · 0 评论 -
MRC单例
除了ARC下的单例,在MRC中我们还要完善下面的代码-(oneway void)release{}-(instancety)retain{ return _instance;}-(NSUInteger)retainCount{ return MAXFOLAT;}原创 2020-05-07 20:28:13 · 153 阅读 · 0 评论 -
ARC单例模式(面试)
单例模式的作用1.可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问2.从而方便的控制了实例个数,并节约系统资源单例模式的使用场景1.在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)如何写一个单例在创建类的时候我们需要用到单例我们需要重写allocWithZone方法比如我们创建了一个HTTool类1.重写alloc方法1.我们需要提供...原创 2020-05-07 20:27:42 · 162 阅读 · 0 评论 -
合成图片(图形上下文)
image1,image2是已经我们下载好的图片,保存在全局变量中1.创建图形上下文UIGraphicsBeginImageContext(CGSizeMake(200,200));2.画图1[self.image1 drawInRectMake(0,0,200,100)];self.image = nil;3.画图2[self.image2 drawInRect:CGRectM...原创 2020-05-07 20:27:12 · 166 阅读 · 0 评论 -
队列组的使用
队列组可以监视队列组里面队列里面的任务执行情况写法一//创建一个并发队列dispatch_queue_t queue = dispatch_get_global_queue(0, 0);//创建一个队列组dispatch_group_t group = dispatch_group_create();//我们将所有进行多线程的任务放在队列组异步函数中(和普通的异步函数多了一个group...原创 2020-05-07 20:26:38 · 209 阅读 · 0 评论 -
文件夹剪切操作
from的路径是我们需要剪切的文件路径to的路径是我们需要剪切到的这个文件夹的路径1.拿到文件路径NSString *from = @"/Users/liuhongtao/Desktop/from";2.获得目标文件路径NSString *to = @"/Users/liuhongtao/Desktop/to";3.得到目录下面的所有文件NSArray *subPaths =...原创 2020-05-07 20:25:53 · 419 阅读 · 0 评论 -
GCD迭代(多线程循环遍历)
开子线程和主线程一起完成遍历任务,任务的执行是并发的第一个参数:遍历的次数第二个参数:队列(并发队列)第三个参数:index 索引(相当于for循环中的i)dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) { <#code#> });...原创 2020-05-06 09:25:59 · 392 阅读 · 0 评论 -
GCD栅栏函数
栅栏函数:我们在并发异步函数的时候,我们想要先执行完某一个或者几个任务之后在执行下面的任务,我们就可以使用栅栏函数箭头就是栅栏函数,我们想要执行完任务一和任务二之后在执行任务三//创建并发队列dispatch_queue_t queue = dispatch_queue_create("并发队列", DISPATCH_QUEUE_CONCURRENT);//使用栅栏函数 ...原创 2020-05-06 09:25:32 · 2123 阅读 · 0 评论 -
GCD常用代码
一GCD延迟代码二一次性代码static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ <#code to be executed once#> });整个应用程序只调用一次注意:一次性代码不可以放在懒加载中应用场景:单例代码...原创 2020-05-06 09:24:43 · 175 阅读 · 0 评论 -
执行延迟的方法(GCD延迟代码)
第一种[self performSelector:@selector(task) withObject:nil afterDelay:2.0];-(void)task{ }Delay:需要延迟的时间第二种定时器[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) use...原创 2020-05-06 09:24:15 · 1495 阅读 · 1 评论 -
线程间通信(GCD)
直接嵌套代码1.创建或者直接获取队列2.使用异步函数,之后在block中使用另外一个异步函数,不过将这个异步函数放在主队列中,这样子在主队列中的代码就是在主线程中执行的dispathc_async(dispatch_get_global_queue(0,0),^{<操作代码> dispatch_async(dispatch_get_main_queue(),^{ <...原创 2020-05-06 09:23:39 · 175 阅读 · 0 评论 -
各种队列的执行效果
并发队列手动创建的串行队列主队列同步(sync)没有开启新线程*串行执行任务没有开启新线程*串行执行任务没有开启新线程*死锁异步(async)有开启新线程*并发执行任务有开启新线程*串行执行任务没有开启新线程*串行执行任务...原创 2020-05-06 09:23:07 · 109 阅读 · 0 评论 -
主队列
使用主队列(跟主线程相关联的队列)主队列是GCD自带的一种特殊的串行队列放在主队列中的任务,都会放到主线程中执行使用dispatch_get_main_queue()获得主队列dispatch_queue_t queue = dispatch_get_main_queue();同步函数+主队列:死锁在主线程中使用:死锁,因为同步函数是等一个任务结束之后再执行下一个,可是我们再主线...原创 2020-05-06 09:22:35 · 209 阅读 · 0 评论 -
GCD基本使用
创建队列第一种第一个参数:C语言的字符串,标签第二个参数:队列的类型DISPATCH_QUEUE_CONCURRENT:并发DISPATCH_QUEUE_SERIAL:串行dispatch_queue_t queue = dispatch_queue_create("ht", DISPATCH_QUEUE_CONCURRENT);第二种获取一个全局并发队列第一个参数:优先...原创 2020-05-06 09:22:03 · 170 阅读 · 0 评论