iOS开发进阶
作为从事iOS开发的IT从业者,我们都有过焦虑和不安,不清楚努力方向,掌握的技术。我们都经历了iOS开发职业行情的跌宕起伏,经常看论坛里面或者朋友出去找工作的,且怨声载道。那你现在是否处于瓶颈期呢?希望此专栏整理的一些技术文档可以帮助你使iOS开发,进阶!!
众拾达人
如果你不改变什么,那什么都不会改变!
展开
-
iOS中socket通信---基于CocoaAsyncSocket实现
前言最近项目中涉及到socket通信这块;所以有幸有时间大概看了一下这一块;目前还在实现阶段,因此现在还不能去些具体的实现过程;现在只大概描述一下这几天看的资料和自己的一点心得吧;等项目实现之后会将具体的实现流程写出来以供大家参考;Socket通信基础Socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写read/write –> 关闭c原创 2017-08-08 09:28:11 · 1297 阅读 · 0 评论 -
iOS开发之Runtime运行时机制
摘要:Objective-C是基于C加入了面向对象特性和消息转发机制的动态语言,除编译器之外,还需用Runtime系统来动态创建类和对象,进行消息发送和转发。作者通过分析Apple开源的Runtime代码来深入理解OC的Runtime机制。三种方法的选择Runtime提供三种方式来将原来的方法实现代替掉,那该怎样选择它们呢?Method Resolution:由于Method Resolution不原创 2017-08-09 10:16:30 · 640 阅读 · 0 评论 -
iOS开发_HOOK
我们在使用NSURLRequest时,传入请求地址URL,但是如果URL中有中文的话,我们会发现NSURLRequest的请求地址会报空- (void)viewDidLoad { [super viewDidLoad]; NSURL * url =[NSURL URLWithString:@"http://www.baidu.com/中文"]; NSURLRequest * r原创 2018-04-23 11:41:59 · 491 阅读 · 0 评论 -
iOS开发_KVO,KVC
KVC:键值编码主要作用是: (1)通过键值路径为对象的属性赋值。主要是可以为私有的属性赋值。AppleViewController *appleVC = [[AppleViewController alloc]init];[appleVC setValue:@"橘子" forKey:@"name"];如果对象A的属性是一个对象B,要设置对象B的属性[person setValue:@"旺财"原创 2018-04-23 15:38:46 · 356 阅读 · 0 评论 -
iOS进阶_kvc使用注意事项
细节1:我们在项目中使用kvc,在设置model属性的时候,注意尽量不要使用基本数据类型。实例:数据模拟:注意age是null类型的Person.h#import <Foundation/Foundation.h>@interface Person : NSObject/** 名称 **/@property(nonatomic,strong)NSStri...原创 2018-05-14 10:53:06 · 505 阅读 · 0 评论 -
iOS进阶_Log分类打印日志自动转换中文
description方法是NSObject类的一个实例方法,因此所有的Object-C对象都有description方法。description方法返回的永远是字符串。 对于一个Person类,如果没有重写description方法,NSLog(@“%@”,p),输出的是p的地址,而我们想要的效果是打印出person的成员变量,所以我们可以在Person类里重写description方法。...原创 2018-05-14 14:21:34 · 2155 阅读 · 1 评论 -
iOS进阶_密码学(一.登录加密的处理)
网络开发中的原则:在网络上不允许传输用户的明文隐私数据在本地不允许保存用户的明文隐私数据密码学: 领域 –> 军事 起源公元前 : 凯撒大帝 有一个密码本: a – e b – c c – z …持续到上世纪70年代 二战时期:美国!设备是最先进的! 截取日军的电报信息!(密文传递的) – 破译时间 事件(大规模的集结) 地点?AF(中途岛)持续到...原创 2018-05-14 17:55:26 · 926 阅读 · 0 评论 -
iOS进阶_密码学(二.钥匙串访问)
网络开发中的原则:在网络上不允许传输用户的明文隐私数据在本地不允许保存用户的明文隐私数据类似于QQ,微信的记住密码,在客户端本地保存用户加密后的密码NSUserDefaults – 明文保存才能反算(能够反算的算法)钥匙串访问 – 开放给开发者是 7.0.3版本—————————– 保存在本地 ————————钥匙串访问: 苹果的”生态圈”,从 iOS...原创 2018-05-15 18:24:54 · 1118 阅读 · 0 评论 -
iOS进阶_密码学(三.指纹识别)
1.iPhone 5s 以后推出指纹识别 2.在 iOS 8.0 苹果才开放了指纹识别 SDK首先我们要清楚指纹识别的应用场景,才能去使用它。我们考虑一个问题:登录的逻辑 是否可以用指纹来代替呢?答案是不能的 指纹和密码的区别指纹:代表你是这个手机的主人密码:代表你是这个账号的主人支付是先做了登录的,登录是用到密码的,两者结合使用才是正确的,指纹不能取代密码指纹识...原创 2018-05-16 10:18:34 · 834 阅读 · 0 评论 -
iOS进阶_密码学(四.抽取登录网络请求的单例)
登录业务逻辑完善 在网络开发中,一般会有一个单例负责所有的网络请求 将这个网络登录的部分代码抽取出来新建一个”类”复制方法调整参数 测试登录能否成功运行WTNetworkTools.h#import &lt;Foundation/Foundation.h&gt;@interface WTNetworkTools : NSObject/** 账户 **/@pro...原创 2018-05-16 15:37:53 · 407 阅读 · 0 评论 -
iOS进阶_密码学进阶(一.对称加密算法简介)
加密算法: - HASH 散列函数 - 不可逆!密码”识别”,文件”识别”以下两种加密算法,都是可逆的! * 明文 –&gt; 加密 –&gt; 密文 * 密文 –&gt; 解密 –&gt; 明文对称加密 - 传统加密算法 加密和解密使用同一个”密钥”!密钥的保密工作就非常的重要!! 密钥会定期更换!密钥的管理很重要!!经典算法 - DES 数据加密...原创 2018-05-16 17:41:47 · 472 阅读 · 0 评论 -
iOS进阶_密码学进阶(二.对称加密算法代码演练)
#import &amp;quot;ViewController.h&amp;quot;#import &amp;quot;EncryptionTools.h&amp;quot;@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //AES - EC原创 2018-05-16 18:47:01 · 341 阅读 · 0 评论 -
iOS进阶_密码学进阶(三.非对称加密算法-RSA公钥私钥的生成)
应用场景:集成支付宝SDK,会看见,p12文件也有。非对称加密算法 一.运行终端,生成私钥 1.cd /Users/mac/Desktop/iOS/加密 2.openssl genrsa -out private.pem 512 //生成私钥,注意:这个私钥其实是放在服务器的 3.openssl rsa -in private.pem -out public.pem -...原创 2018-05-16 19:52:52 · 687 阅读 · 0 评论 -
iOS进阶_密码学进阶(四.非对称加密算法代码实现)
把封装好的工具类拖进工程,再把生成的p12文件和.der文件同样拖入工程当中。注意,要把p12文件和.der文件与工程相关联不然我们在执行下面代码的时候会直接崩溃,进入工具类的断言中,报出“公钥路径为空”的错误#import "ViewController.h"#import "RSACryptor.h"@interface ViewController ()...原创 2018-05-17 17:51:00 · 351 阅读 · 0 评论 -
iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)
NSURLConnection下载我们在前面的文章中介绍了MAC电脑搭建Apache服务器,在Sites文件夹中放置一个视频文件MVVM.mp4.pbb,通过NSURLConnection进行下载访问http://localhost,我们可以进行查看,所有Apache服务器中的文件- (void)touchesBegan:(NSSet&lt;UITouch *&gt; *)touc...原创 2018-05-18 17:55:00 · 5516 阅读 · 2 评论 -
iOS进阶_NSURLSession(一.NSURLSession下载)
NSURLSession简介在上一篇文章中,我们介绍了NSURLConnection做网络请求,坑很多。到目前为止开发者几乎不再使用NSURLConnection,而是改为更加便捷的方式,那就是NSURLSession。或者更多的是使用第三方框架,我们要使用第三方框架,也要了解它的使用原理,来更好的使用它!NSURLSession出现在iOS7.0(15年),当时有个BUG,使用NSURL...原创 2018-05-21 16:29:29 · 1577 阅读 · 0 评论 -
iOS进阶_NSURLSession(二.断点续传)
断点续传从上一篇文章中,我们了解了使用NSURLSession进行文件下载,我们在其基础上继续探索NSURLSession的断点续传。在NSURLSession中,我们使用reumeData来存储下载的数据进度。#import "ViewController.h"#import "WTProgressBtn.h"@interface ViewController ()&lt;NS...原创 2018-05-22 11:43:35 · 361 阅读 · 0 评论 -
iOS进阶_下载管理器(封装下载用工具类)
同步方法的应用场景:1.抓取网络数据,如果开启多条线程异步抓取,很容易被封IP 2.加载本地文件,可以直接使用同步方法,比较简单 3. 加载要下载文件的头部信息,HEAD方法-(void)demo1{ NSURL * url = [NSURL URLWithString:@&amp;quot;http://127.0.0.1/abc.json&amp;quot;]; NSURLRequest * req...原创 2018-05-22 16:38:26 · 2901 阅读 · 0 评论 -
iOS进阶_WebDav(一.配置WebDav服务器)
WebDav完全可以当成一个网络共享的文件服务器使用!步骤: 1. 修改了两个配置文件 2. 创建web访问用户的用户名和口令 3. 创建了两个目录,并且设置了管理权限切换目录$ cd /etc/apache2$ sudo vim httpd.conf查找httpd-dav.conf(先按下/ 键,再复制httpd-dav.conf)/httpd-dav.conf...原创 2018-05-23 10:45:44 · 12434 阅读 · 0 评论 -
iOS进阶_WebDav(二.WebDav上传文件)
以PUT方式上传文件至WebDav#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after lo...原创 2018-05-23 11:46:02 · 2235 阅读 · 0 评论 -
iOS进阶_WebDav(三.HTTP状态码)
注意: 1xx代表信息 2XX代表成功 3XX代表请求重定向 4XX代表客户端错误 5XX代表服务器错误记住这些就可以了,剩下的具体错误,再去下面查看1xx消息这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户...原创 2018-05-23 11:48:36 · 1233 阅读 · 0 评论 -
iOS进阶_WebDav(四.WebDav的HEAD&DELETE)
GET 查 - 下载文件(不需要身份验证) POST 增 - WebDav不支持POST请求!! DELETE 删(不安全) - 删除服务器上的文件(需要身份验证) PUT 改(不安全) - 修改服务器上的文件(需要身份验证)HEAD 获取信息 - 获取文件信息(不需要身份验证)RESTful 设...原创 2018-05-23 14:39:16 · 932 阅读 · 0 评论 -
iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)
WebDav的上传进度#import "ViewController.h"@interface ViewController ()&lt;NSURLSessionTaskDelegate&gt;/** 会话 */@property(nonatomic,strong)NSURLSession * session;@end@implementation ViewController...原创 2018-05-23 15:13:59 · 1671 阅读 · 0 评论 -
知识贴 | iOS 开发中 runtime 常用的几种方法
一、runtime 简介runtime 简称运行时,是系统在运行的时候的一些机制,其中最主要的是消息机制。它是一套比较底层的纯 C 语言 API, 属于一个 C 语言库,包含了很多底层的 C 语言 API。我们平时编写的 OC 代码,在程序运行过程时,其实最终都是转成了 runtime 的 C 语言代码。如下所示:// OC代码:[Person coding];//运行时 run...原创 2018-08-07 11:26:12 · 383 阅读 · 0 评论 -
Objective-C实现链式编程语法(DSL)
您越着急开始写代码,代码就会花费越长的时间。 - Carlson, University of Wisconsin前言熟悉Objective-C这一门编程语言的人都知道,Objective-C中方法的调用都是通过中括号[]实现的。比如[self.view addSubview:xxxView];如果想要在一个对象上连续调用多个方法,就要使用多组中括号嵌套(当然要保证每个方法都能把该对象作为...原创 2018-08-09 18:15:36 · 472 阅读 · 0 评论 -
iOS程序异常Crash友好化处理
线上的app怎么避免闪退?我们在正常开发的时候,需要考虑各种容错机制,同时,也可以借助NSSetUncaughtExceptionHandler 函数来捕获异常,我们可以比较友好的处理程序异常,带来的突然崩溃。用法将CatchedHelper文件夹拖入项目工程中。在AppDelegate.m中找到以下方法并如下添加代码: [UncaughtExceptionHandler i...原创 2018-08-15 16:01:13 · 497 阅读 · 0 评论 -
iOS进阶_Crash
iOS Crash问题是iOS开发中难以忽视的存在,本文就捕获iOS Crash、Crash日志组成、Crash日志符号化、异常信息解读、常见的Crash五部分介绍。一、捕获iOS Crash1、设置异常断点并运行说明:设置Xcode异常断点后运行程序,发生Crash时,断点会定位到出错的代码行,但仅适用于开发阶段。线上APP的Crash还需要通过收集Crash机制来捕获Cra...原创 2018-08-15 17:42:51 · 587 阅读 · 0 评论 -
一个在 iOS 设备屏幕上实时打印 Log 的小工具
需求写这个小工具的想法,主要来源于很多团队都会用友盟、TalkingData 等第三方框架做自定义事件统计;不过统计代码加好之后,没有很好的方法来让测试工程师验证一下事件加上了没有,调用次数有没有重复等。这个小工具,是一个保持在最前的 UIWindow,可以实时打印 log。gitHub地址用法只需把 HAMLogOutputWindow.h、HAMLogOutputWin...原创 2018-08-21 13:52:26 · 1020 阅读 · 0 评论 -
iOS:多效果的CategoryView
There is an English version of README here. just click it!A powerful and easy to use category view (segmentedcontrol, segmentview, pagingview, pagerview, pagecontrol) (腾讯新闻、今日头条、QQ音乐、网易云音乐、京东、爱奇艺、腾讯...原创 2018-08-27 15:05:12 · 4644 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第一篇
简介:ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。而本门课程就会教大家如何灵活运用ReactiveCocoa。RAC初识-设计模式+RAC信号量的统一 Cocoapods引入ReactiveCocoaPodfile文件platform :ios, "8.0"sour原创 2017-07-07 16:11:25 · 748 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第二篇登录实例
我们平时在做登录注册的时候,需要校验用户名和密码的textField输入内容,比如字符长度,设置textField的deleagte。 代码如下:.h文件#import "LoginViewViewController.h"@interface LoginViewViewController ()<UITextFieldDelegate>@property(nonatomic,strong)UI原创 2017-07-10 14:08:47 · 2251 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第三篇实例颜色选择器
RAC相对于传统的模式,拥有两个相当明显且重要的特性 1.编程逻辑的流畅性 2.编程代码的清晰性我们可以以RAC信号量的方式,相互订阅控件,相互绑定控件变量。代码简洁,且结构清晰。实现效果图:代码部分:Cocoapods引入ReactiveCocoa Podfile文件platform :ios, "8.0"source 'https://github.com/CocoaPods/Specs原创 2017-07-11 17:27:16 · 726 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第四篇构建一个信号量
关于RAC: 代码层面分析信号量的核心概念,信号量是程序中各种事件的承载实例,就像一根管子,一头连接生产者,一边连接消费者。当消费者有消费需求,生产者就生产产品。数据就是这个管子中的产品。期间经过加工处理,最后成为消费者需要的产品,送达消费者手中。并且这些管子还会有合并的情况,管子中任何产品的改变都会影响最后组合成的产品。如图:查看RAC的头文件,我们发现信号量继承自RACStream,str原创 2017-07-11 17:56:33 · 1094 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第五篇队列与高级函数
.h文件#import "ViewController.h"@import ReactiveCocoa;@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loa原创 2017-07-14 14:16:42 · 932 阅读 · 0 评论 -
iOS开发之ReactiveCocoa框架(RAC)第六篇程序定位
使用RAC方式与传统方式做定位功能的对比首先,因为使用定位功能,所以要在info.plist文件里面做请求描述设置添加下面两个字段: Privacy - Location Always Usage Description Privacy - Location When In Use Usage Description然后是代码部分:.h文件#import "ViewController.h"@i原创 2017-07-17 09:37:17 · 709 阅读 · 0 评论 -
iOS进阶_多线程(一.pthread与NSThread的使用)
多线程的优缺点:优点 1. 能适当提高程序的执行效率 2. 能适当提高资源利用率(CPU,内存利用率)缺点 1. 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB),栈空间(子线程512KB,主线程1MB,也可以使用-setStackSize;设置),但必须是4K的倍数,而且最小是16K,创建线程大约需要90毫秒的创建时间。 2. 如果开启大量的线程,会降...原创 2018-04-27 17:04:10 · 385 阅读 · 1 评论 -
iOS进阶_多线程(二.线程间的状态)
线程间的状态原创 2018-05-02 14:25:22 · 243 阅读 · 0 评论 -
iOS进阶_多线程(三.多线程属性和安全隐患)
线程属性name属性,在大型的商业项目中,通常希望程序在崩溃的时候,能够获取到程序准确的所在的线程!- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self threadDemo];}-(void)threadDemo{ NSThread ...原创 2018-05-03 09:37:23 · 636 阅读 · 0 评论 -
iOS进阶_GCD(一.简单使用)
iOS多线程相关的其实就是pthread和NSThread两种,是可以让开发者直接操作线程的。而GCD和NSOperation其实属于并发解决技术。什么是GCD? 全称是Grand Central Dispatch,可翻译为“牛逼的中枢调度器”! 纯C语言,提供了非常多强大的函数。GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核,四原创 2018-05-04 10:15:41 · 277 阅读 · 0 评论 -
iOS进阶_GCD(二.GCD串行队列&并发队列)
GCD 核心概念:将任务添加到队列,指定任务执行的方法任务 使用block封装block 就是一个提前准备好的代码块,在需要的时候执行队列(负责调度任务) 串行队列:一个接一个的调度任务并发队列:可以同时调度多个任务任务执行函数(任务都需要在线程中执行!) 同步执行:当前指令不完成,不会执行下个指令异步执行:当前指令不完成,同样可以执行下一条指令总结: -开不开线...原创 2018-05-04 14:20:41 · 3095 阅读 · 1 评论