<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ivolcano的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ivolcano</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ivolcano]]></copyright><item><title><![CDATA[工作中遇到的crash总结]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90929884</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90929884</guid><author>ivolcano</author><pubDate>Wed, 05 Jun 2019 20:25:43 +0800</pubDate><description><![CDATA[目录



async-signal-safe

异常

C++ 异常

Objective-C

访问非对象内存

objc_msgSend 内部 crash

访问被释放的对象

SIGBUS 信号

物理地址不正确

物理地址未对齐

SIGSEGV 信号

空指针

执行没有执行权限的内存

向只读内存进行写操作

栈溢出

SIGILL

执行特权模式指令

执行未定义指令

SIGT...]]></description><category></category></item><item><title><![CDATA[无用图片扫描、删除脚本（Python）]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90813154</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90813154</guid><author>ivolcano</author><pubDate>Tue, 04 Jun 2019 21:18:09 +0800</pubDate><description><![CDATA[使用Python开发检查脚本，原理是：

1. 首先扫描所有特定后缀（ '.png', '.jpg', 'jpeg' , '.imageset'）等格式的图片文件 或 图片文件夹，获取文件名，存入 allImageFiles 数组中；

2. 扫描所有代码文件，逐行分析，若有引用 allImageFiles 内图片文件文件名的字符串，则将该字符串对应的图片文件列为有用图片，存入 usedImage...]]></description><category></category></item><item><title><![CDATA[MVVM+RAC总结]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90720488</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90720488</guid><author>ivolcano</author><pubDate>Sat, 01 Jun 2019 11:07:05 +0800</pubDate><description><![CDATA[目录

一、什么是MVVM

二、为什么使用MVVM

三、RAC

3.1 RAC的用法

四、RAC与MVVM架构设计的优点

五、MVVM + RAC

5.1 MVVM使用指南

5.2 RAC坑

一、什么是MVVM

MVVM（Model - View/ViewController - ViewModel）是对MVC的一种变形设计模式，解决ViewController代码臃肿、View...]]></description><category></category></item><item><title><![CDATA[包大小治理总结]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90665137</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90665137</guid><author>ivolcano</author><pubDate>Wed, 29 May 2019 13:39:07 +0800</pubDate><description><![CDATA[目录

一、图片资源

1.1 清理无用图片

1.2清理重复图片

1.3压缩图片大小

二、代码瘦身

2.1 找寻无用代码

RealizeClass 的实现

RealizeClass的调用时机

如何遍历所有的类？

Class &amp; MetaClass

小结



这是我个人的经验总结，如有更好的意见大家一起交流哈，共同进步。

为什么要管理包大小？相信iOS开发者们都知...]]></description><category></category></item><item><title><![CDATA[WWDC]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90614130</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90614130</guid><author>ivolcano</author><pubDate>Mon, 27 May 2019 23:41:51 +0800</pubDate><description><![CDATA[2017 WWDC

让我印象最深的就是Xcode 9的匠心、吊炸天的Core ML和VR

编译和索引

速度就是一切

Xcode 9的编译系统是用Swift重写的，编译速度有了很大的提升，同时索引系统也使用了新的引擎，超大项目中文件夹滑动FPS能达到60，代码搜索速度可最多提升50倍（Demo里有一个上w行的文件，寻找一个文件尾部的函数，瞬间就定位到了）



2018 WWDC

本届W...]]></description><category></category></item><item><title><![CDATA[2016WWDC-App Signing]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90611334</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90611334</guid><author>ivolcano</author><pubDate>Mon, 27 May 2019 21:11:37 +0800</pubDate><description><![CDATA[目录

2016WWDC

401 - What's New in Xcode App Signing

存在问题

1.开发者无法专注于开发

2.团队合作

3.provisioning profile操作繁琐

3.provisioning profile通过ID引用

曾经的尝试

1.Xcode7免证书真机调试

新的方案

1.自动签名（Automatic Signing）

2.定制...]]></description><category></category></item><item><title><![CDATA[OAuth1.0 和OAuth2.0的区别]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90414175</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90414175</guid><author>ivolcano</author><pubDate>Tue, 21 May 2019 20:25:34 +0800</pubDate><description><![CDATA[一、为什么出现OAuth？

OAuth是一个开放的标准，在移动、web平台能提供一种安全地API授权，使第三方应用不需要密码账号通过授权的方式就可以进行登录。

要解决的问题：打破传统的账号密码登录登录方式，不管是对于用户还是应用提供商，都能安全保障账号数据不被泄露。

二、OAuth1.0 (-2012.4.20)



1请求request code 和 access token过程中，得...]]></description><category></category></item><item><title><![CDATA[iOS APNs推送常见问题]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/90373299</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/90373299</guid><author>ivolcano</author><pubDate>Mon, 20 May 2019 14:04:55 +0800</pubDate><description><![CDATA[此文章主要总结对自己在维护推送SDK过程中的经验总结。但是只针对APNs进行总结，自建通道属于公司隐私，如有不同的意见欢迎补充，大家一起探讨。

一、推送消息没收到

1.1 客户端排查

检查设备通知设置，查看自己的应用是否打开了推送消息权限。
	检查设备网络设置，有两部分原因：（1）设备网络异常，可能导致客户端在注册APNs时获取消息的标识失败，这将导致APNs服务器无法给指定设备推送消息。...]]></description><category></category></item><item><title><![CDATA[MVVM架构设计文档]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89845795</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89845795</guid><author>ivolcano</author><pubDate>Sun, 12 May 2019 20:12:26 +0800</pubDate><description><![CDATA[摘要

这篇文档主要讲解MVVM架构的具体设计，分别有层级划分、层级职责和层级之间的通信，层级内的模块划分、模块职责和模块之间的通信，模块内使用的设计模式和设计模式的使用场景。作为程序设计的准则和规范，并为以后的框架改进提供参考。

设计目标

架构设计按优先级需要达成以下目标：

层级、模块之间的低耦合性
	逻辑层的复用性
	逻辑层的高度灵活性，可快速应对需求变化，达到可用逻辑模块的拼装完成一个...]]></description><category></category></item><item><title><![CDATA[GCD基本使用总结]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89817117</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89817117</guid><author>ivolcano</author><pubDate>Sat, 04 May 2019 22:26:15 +0800</pubDate><description><![CDATA[1.GCD的基本使用

1.1 同步执行 + 串行队列





总结：所有任务都是在主线程完成的，证明了同步执行不具备开启新的线程。所有任务都是按序执行。

1.2 同步执行+并发队列





总结：所有任务都是在主线程中执行的，没有开启新的线程，也就是说同步不具备开启新线程的能力。虽然并发队列可以同时执行多个任务，但是当前只有一个线程，一个线程只能执行一个任务，所以这里也就不存在并发队列。
...]]></description><category></category></item><item><title><![CDATA[组件间通信方式]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89790476</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89790476</guid><author>ivolcano</author><pubDate>Fri, 03 May 2019 20:39:54 +0800</pubDate><description><![CDATA[一种组件间通信方式

QHOServiceManager 是我们推出的业务间通信的解决方案，方便客户端不同的业务仓库之间进行交互。解决不同业务库代码需要互相调用，但是不能直接依赖代码的问题。

没有看懂？没关系，简单来说，当你想要用其他业务库的代码逻辑，却不想，或者，不能把其他业务 pod 添加到你的 podspec 时，你可能就是 QHOServiceManager 的潜在用户。

问题的起因和...]]></description><category></category></item><item><title><![CDATA[开发中需要注意的性能优化技巧]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89790204</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89790204</guid><author>ivolcano</author><pubDate>Fri, 03 May 2019 18:46:29 +0800</pubDate><description><![CDATA[原则


	不做事情是最快的
	
	
	耗时操作（IO等）放后台线程
	
	
	不是立刻需要的东西使用懒加载
	
一些具体的技巧

使用Caesium获取方法级耗时数据，并找出优化点

在进入一个耗时的“重”方法之前使用轻量的 flag 判断是否需要去做

使用局部变量减少方法重复调用

声明类型时用 NS_ENUM，而不是 NSString

及时删除无用的老代码

谨慎使用 lock，通过良好...]]></description><category></category></item><item><title><![CDATA[iOS main之前发生了什么]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89739531</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89739531</guid><author>ivolcano</author><pubDate>Wed, 01 May 2019 18:58:11 +0800</pubDate><description><![CDATA[目录



编译

预处理

词法分析

语法分析

语义分析

中间代码生成

链接

签名

生成签名

验证签名

装载

虚拟内存

创建虚拟内存空间

建立程序与虚拟内存的映射关系

把 CPU 的 PC 设置为进程入口

Mach-O 文件的加载

Mach-O 文件格式

dyld 加载

一、基于DYLD_PRINT_STATISTICS 的分析

分析方法

编译

预处理
...]]></description><category></category></item><item><title><![CDATA[UIScrollView的Autolayout问题]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/89445750</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/89445750</guid><author>ivolcano</author><pubDate>Mon, 22 Apr 2019 09:40:42 +0800</pubDate><description><![CDATA[UIScrollView本质上是简单的，通过frame指定了视窗的位置大小，通过contentSize指定了内容的大小（可滚动的区域）。

Autolayout本质上也是简单的，通过指定相对和绝对量，控制UI组件的位置和大小。

这两个本质上简单的东西碰撞到一起后，产生了可怕的火花。

首先，contentSize的概念隐藏了，我们也不愿意去计算实际的size去指定scrollview的conte...]]></description><category></category></item><item><title><![CDATA[iOS 集合的深复制与浅复制]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78047390</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78047390</guid><author>ivolcano</author><pubDate>Thu, 21 Sep 2017 06:39:29 +0800</pubDate><description><![CDATA[概念对象拷贝有两种方式：浅复制和深复制。顾名思义，浅复制，并不拷贝对象本身，仅仅是拷贝指向对象的指针；深复制是直接拷贝整个对象内存到另一块内存中。再简单些说：浅复制就是指针拷贝；深复制就是内容拷贝。集合的浅复制 (shallow copy)集合的浅复制有非常多种方法。当你进行浅复制时，会向原始的集合发送retain消息，引用计数加1，同时指针被拷贝到新的集合。 
现在让我们看一些浅复制的例子：NSA]]></description><category></category></item><item><title><![CDATA[二叉树中两个节点的最低公共父节点]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78046927</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78046927</guid><author>ivolcano</author><pubDate>Wed, 20 Sep 2017 23:41:28 +0800</pubDate><description><![CDATA[问题描述构建一棵二叉树（不一定是二叉查找树），求出该二叉树中某两个结点的最低公共父结点。借用一张图如下： 
最低公共父结点的思路递归，首先从树根开始考虑：①结点A 和 结点B 要么都在树根的左子树中；②要么都在树根的右子树中；③要么一个在左子树中，一个在右子树中。这是一个分治算法，对于情况①和②，可以继续递归分解。对于情况③属于代码第10行判断，复杂度为O(1)递归表达式可表示为：T(N)=2T(N]]></description><category></category></item><item><title><![CDATA[iOS中HTTPS证书验证浅析]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78017427</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78017427</guid><author>ivolcano</author><pubDate>Mon, 18 Sep 2017 11:35:57 +0800</pubDate><description><![CDATA[本文来自于腾讯Bugly公众号（weixinBugly），原文地址：https://mp.weixin.qq.com/s/-fLLTtip509K6pNOTkflPQ 
我是带着一系列的问题，找到了这篇文章，很好地解答我的疑惑！ 
1.怎么抓HTTPS的包？  
2.中间人攻击是什么？解决方案？ 
3.https通讯的话，代码怎么实现CA证书校验？  
4.CA证书校验都有哪些类型可以检验 ？本文分]]></description><category></category></item><item><title><![CDATA[带你看看GCD]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78014469</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78014469</guid><author>ivolcano</author><pubDate>Sun, 17 Sep 2017 23:00:24 +0800</pubDate><description><![CDATA[简介谈到iOS多线程，一般都会谈到四种方式：pthread、NSThread、GCD和NSOperation。其中，苹果推荐也是我们最经常使用的无疑是GCD。GCD优点GCD是一套低层级的C API，通过 GCD，开发者只需要向队列中添加一段代码块(block或C函数指针)，而不需要直接和线程打交道。GCD在后端管理着一个线程池，它不仅决定着你的代码块将在哪个线程被执行，还根据可用的系统资源对这些线]]></description><category></category></item><item><title><![CDATA[归并排序]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78013025</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78013025</guid><author>ivolcano</author><pubDate>Sun, 17 Sep 2017 20:25:40 +0800</pubDate><description><![CDATA[归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法（Divide and Conquer）的一个非常典型的应用。将已有序的子序列合并，得到完全有序的序列；即先使每个子序列有序，再使子序列段间有序。若将两个有序表合并成一个有序表，称为二路归并。归并过程： 
归并： 
1.比较a[i]和a[j]的大小； 
2.若a[i]≤a[j]，则将第一个有序表中的元素a[i]复制到r[k]中，并令i]]></description><category></category></item><item><title><![CDATA[dispatch_barrier_async和dispatch_barrier_sync的区别在哪呢？]]></title><link>https://blog.youkuaiyun.com/ivolcano/article/details/78012385</link><guid>https://blog.youkuaiyun.com/ivolcano/article/details/78012385</guid><author>ivolcano</author><pubDate>Sun, 17 Sep 2017 19:04:35 +0800</pubDate><description><![CDATA[先看用dispatch_barrier_sync代码： 
给的图里写的是dispatch_barrier_sync，因为我们需要先看看我们熟悉的等待——sync是什么效果，直接跑起来 ，看结果如下 
 
可以看到，确实是1、2、3号任务并发执行完了，然后再执行我们dispatch_barrier_sync中的任务，再并发执行的4、5、6号任务，当然，point3和barrier之间是有明显停顿的，截]]></description><category></category></item></channel></rss>