<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sacrifice的博客]]></title><description><![CDATA[目中有人才有路，心中有爱才有度 !]]></description><link>https://blog.youkuaiyun.com/sacrifice123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sacrifice123]]></copyright><item><title><![CDATA[OC对象内存大小探究]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/86711744</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/86711744</guid><author>sacrifice123</author><pubDate>Thu, 31 Jan 2019 10:44:09 +0800</pubDate><description><![CDATA[Objective-C编程语言是C语言的超集，在C语言的基础上加入了面向对象的内容。OC可以和C／C++混合使用，OC对象都可以转化为C／C++结构体表示。

要想知道一个NSObject对象占用多少内存，可以通过查看NSObject对象对应的C++结构体的大小来判断。

我们可以使用xcode的命令行来把指定的OC文件转成C++文件。


//main.m
#import &amp;lt;Foundat...]]></description><category></category></item><item><title><![CDATA[解决iOS11刷新tableview时抖动问题]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/86688877</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/86688877</guid><author>sacrifice123</author><pubDate>Tue, 29 Jan 2019 13:46:07 +0800</pubDate><description><![CDATA[iOS tableview开启高度估算（Self-Sizing），reloadData的时候不再全部计算高度。

解决方案：

在初始化tableview的时候加上这几行


 _tableView.estimatedRowHeight = 0;
 _tableView.estimatedSectionHeaderHeight = 0;
 _tableView.estimatedSectionFo...]]></description><category></category></item><item><title><![CDATA[点击事件的HOOK]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/86085062</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/86085062</guid><author>sacrifice123</author><pubDate>Tue, 08 Jan 2019 17:10:18 +0800</pubDate><description><![CDATA[我们在做数据埋点时，如果要做到解藕的实现，需要使用hook的方式做拦截。

在做UIButton事件拦截的时候，我知道button点击后会执行sendAction:to:forEvent:方法，所以我可以hook这个方法做些其他事，那UIView的Tap事件，该拦截哪个方法呢？

我们可以拦截shouldReceiveTouch


- (BOOL)gestureRecognizer:(UIGes...]]></description><category></category></item><item><title><![CDATA[在现有工程中实施基于CTMediator的组件化方案]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/85306759</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/85306759</guid><author>sacrifice123</author><pubDate>Thu, 27 Dec 2018 21:05:23 +0800</pubDate><description><![CDATA[国内业界大家对组件化的讨论从今年年初开始到年尾，不外乎两个方案：URL/protocol注册调度，runtime调度。

 

我之前批评过URL注册调度是错误的组件化实施方案，在所有的基于URL注册调度的方案中，存在两个普遍问题：

 

命名域渗透
	因注册是不必要的，而带来同样不必要的注册列表维护成本
 

其它各家的基于URL注册的不同方案在这两个普遍问题上还有各种各样的其他问题，例如FR...]]></description><category></category></item><item><title><![CDATA[错误 ld: library not found for -lPods]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/84992822</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/84992822</guid><author>sacrifice123</author><pubDate>Thu, 13 Dec 2018 18:08:54 +0800</pubDate><description><![CDATA[
ld: library not found for -lPods-XXXX
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在将工程放到git上管理时 然后克隆下来 再打开工程可能会出现上面的问题
解决办法: 在 Build Phase 下的 Link Binary With Lib...]]></description><category></category></item><item><title><![CDATA[iOS组建化—私有库]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/83958405</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/83958405</guid><author>sacrifice123</author><pubDate>Sun, 11 Nov 2018 15:27:35 +0800</pubDate><description><![CDATA[私有库顾名思义是私有的，我在GitHub上使用的都是公开库，出于安全与机密考虑，公司级开发都是使用私有库。下面先说几个概念。

一、索引库

我们每创建一个组件都会带有一个 xxx.podspec 的索引文件，这个文件包含组建框架的描述信息、框架名称、版本号、真正的代码存放地址及框架源码远程地址。那么专门用来存放这些索引文件的库就叫做索引库。索引库有本地索引库和远程索引库之分。远程索引库就是放在远...]]></description><category></category></item><item><title><![CDATA[马甲包绕过审核技巧整理]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/81203947</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/81203947</guid><author>sacrifice123</author><pubDate>Wed, 25 Jul 2018 15:38:34 +0800</pubDate><description><![CDATA[现在马甲包制作越来多，很多时候上线时就会被拒，据说帮助某彩票app马甲上线成功一个可以给到一万元的酬金。废话少说，我整理了下我用到的绕过审核的方案，主要是代码混淆与更改工程名，具体附上链接：

1. iOS使用Shell脚本批量修改类名称

2. iOS使用shell脚本批量修改属性

3.更改项目工程名...]]></description><category></category></item><item><title><![CDATA[iOS 马甲包制作]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/81203631</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/81203631</guid><author>sacrifice123</author><pubDate>Wed, 25 Jul 2018 15:24:56 +0800</pubDate><description><![CDATA[ 

一、马甲包简介

在ASO中马甲的意思就是内容与主APP一样，但icon图标、应用名不同，一般来说开发者的帐号是不同的，但也有的同鞋做的马甲开发者帐号都是同一样，不过这样的话，隐蔽性要差一些。

做马甲有哪些好处

1.替主号进行改版测试,将风险最小化。

使用主App进行改版测试会存在很多弊端,马甲的好处是可以随意更改,一旦引发不良影响又不会造成很大的损失。如果测试效果良好,则可以对主Ap...]]></description><category></category></item><item><title><![CDATA[oc调用传参入string格式json串js方法无法执行]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/80974558</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/80974558</guid><author>sacrifice123</author><pubDate>Mon, 09 Jul 2018 17:30:14 +0800</pubDate><description><![CDATA[今天遇到一个奇葩的问题，weiView执行JS代码时，总是没有效果，可是方法名与参数都没有错，代码如下： [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@&quot;%@('%@');&quot;, methodName, paraStr]];，其中字符串paraStr格式如下{  &quot;serverId&quot; : &quot;10...]]></description><category></category></item><item><title><![CDATA[iOS把url中含有的中文字符转化为UTF8编码]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/80570546</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/80570546</guid><author>sacrifice123</author><pubDate>Mon, 04 Jun 2018 17:43:30 +0800</pubDate><description><![CDATA[今天在写项目时，添加H5跳转链接时，发现一进入页面就白屏，但是在浏览器中可以打开页面，仔细检查后发现URL里有中文字符，就产生怀疑，感觉出问题所在，然后把url转化为utf8编码的格式恢复正常，很简单的一句话解决问题：    self.url = [self.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];...]]></description><category></category></item><item><title><![CDATA[iOS面试题总结]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/79547885</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/79547885</guid><author>sacrifice123</author><pubDate>Tue, 13 Mar 2018 22:17:10 +0800</pubDate><description><![CDATA[1、设计模式是什么？ 你知道哪些设计模式，并简要叙述？设计模式是一种编码经验，就是用比较成熟的逻辑去处理某一种类型的事情。
1). MVC模式：Model View Control，把模型 视图 控制器 层进行解耦合编写。
2). MVVM模式：Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。
3). 单例模式：通过static关键词，声明全局变量。在整个进程运...]]></description><category></category></item><item><title><![CDATA[iOS端启动速度优化]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/79373750</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/79373750</guid><author>sacrifice123</author><pubDate>Mon, 26 Feb 2018 10:11:50 +0800</pubDate><description><![CDATA[应用启动流程iOS应用的启动可分为pre-main阶段和main()阶段，其中系统做的事情依次是：1. pre-main阶段1.1. 加载应用的可执行文件1.2. 加载动态链接库加载器dyld（dynamic loader）1.3. dyld递归加载应用所有依赖的dylib（dynamic library 动态链接库）对于pre-main阶段，Apple提供了一种测量各阶段的耗时的方法，在 Xco...]]></description><category></category></item><item><title><![CDATA[Cocoapods创建pod公有库]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/73179629</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/73179629</guid><author>sacrifice123</author><pubDate>Wed, 14 Jun 2017 10:00:14 +0800</pubDate><description><![CDATA[一、 首先简单了解下cocoapods的机制

cocoapods有个远程索引库，索引库下放着框架的描述信息：框架的名称，框架的版本号，框架的描述文件(.spec)，开发者上传的代码都是位于索引库的远程地址下。当你进行pod初始化(pod setup)时，会把远程索引库下载到本地，即生成一个本地的索引库。当我们搜索某个框架时(pod search xxx)，其实在本地库里索引,此时真正的内部操作是...]]></description><category></category></item><item><title><![CDATA[ReactiveCocoa学习之创建信号]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/70210831</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/70210831</guid><author>sacrifice123</author><pubDate>Mon, 17 Apr 2017 15:07:29 +0800</pubDate><description><![CDATA[ReactiveCocoa 是一个 iOS 中的函数式响应式编程框架，简称RAC，RAC关键解决的问题是开发中经常回见的“低聚合，高耦合”问题。在RAC出现之前，我们编写iOS代码，大部分都是在响应一些事件：按钮点击、接收网络消息、属性变化等等。但处理事件的形式在苹果官方API中却有好几种：如target-action、代理方法、KVO、回调或其它。以上这几种，往往在一个项目中基本都会使用到，在不]]></description><category></category></item><item><title><![CDATA[Runloop的使用]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51862058</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51862058</guid><author>sacrifice123</author><pubDate>Fri, 08 Jul 2016 17:43:16 +0800</pubDate><description><![CDATA[一、什么runloop
从字面意思就是运行循环，他的作用体现在保持程序的持续运行，处理app中的各种事件（比如触摸事件、定时器事件、selector事件），节省cpu资源，提高程序性能：做事的时候做事，没事的时候睡眠。


我们的main函数里就启动了个runloop，所以程序运行起来后并不会马上退出，保持持续运行的状态。
runloop的逻辑处理：




二、runloop]]></description><category></category></item><item><title><![CDATA[iOS9新特性]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51743803</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51743803</guid><author>sacrifice123</author><pubDate>Thu, 23 Jun 2016 17:04:45 +0800</pubDate><description><![CDATA[一、iOS9新出的关键字
作用：用于修饰属性，方法参数，方法返回值


好处：1.迎合swift
           2.提高开发人员的规范，减少程序员之间的交流


关键字：nonnull 对象非空
               nullable 对象可以为空


       null_resettable :get:不能返回为空, set可以为空

      ]]></description><category></category></item><item><title><![CDATA[CALayer使用（未完待续）]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51734831</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51734831</guid><author>sacrifice123</author><pubDate>Wed, 22 Jun 2016 16:35:52 +0800</pubDate><description><![CDATA[一、什么是CALayer？
在iOS系统中，你能看得到摸得着的东西基本都是UIview。比如一个按钮、一个文本标签、一个文本输入框、一个图标等等，这些都是UIview。
其实UIview之所以显示在屏幕上，完全是因为它内部的一个层。
在创建UIview对象时，UIview内部会自动创建一个层（即CALayer对象），通过UIview的layer属性可以访问这个层。当UIview需要显示到屏幕]]></description><category></category></item><item><title><![CDATA[IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51730177</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51730177</guid><author>sacrifice123</author><pubDate>Tue, 21 Jun 2016 21:04:42 +0800</pubDate><description><![CDATA[阅读本文之前首先了解copy与retain的区别，如果有不正确的地方望大家多多指教:

copy与retain的区别：
copy是创建一个新对象，retain是创建一个指针，引用对象计数加1。Copy属性表示两个对象内容相同，新的对象retain为1 ，与旧有对象的引用计数无关，旧有对象没有变化。copy减少对象对上下文的依赖。
       retain属性表示两个对象地址相同（建立一个]]></description><category></category></item><item><title><![CDATA[weak修饰符]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51729820</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51729820</guid><author>sacrifice123</author><pubDate>Tue, 21 Jun 2016 20:32:07 +0800</pubDate><description><![CDATA[一、在OC中，如果对象没有强引用，就会被自动释放，那么为什么控件还可以设为weak?
我们平时定义控件属性的时候一般都会用strong修饰符，而我们在用xib，sb拖控件的时候会发现，这时属性都是用的weak修饰符。


1. 从storyboard或者xib上创建控件，在控件放在view上的时候，已经形成了如下的引用关系,以UIButton为例：
UIViewController->U]]></description><category></category></item><item><title><![CDATA[atomic与nonatomic区别]]></title><link>https://blog.youkuaiyun.com/sacrifice123/article/details/51724984</link><guid>https://blog.youkuaiyun.com/sacrifice123/article/details/51724984</guid><author>sacrifice123</author><pubDate>Tue, 21 Jun 2016 09:55:35 +0800</pubDate><description><![CDATA[atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操作。atomic提供多线程安全,是描述该变量是否支持多线程的同步访问，如果选择了atomic
 那么就是说，系统会自动的创建lock锁，锁定变量。nonatomic禁止多线程，变量保护，提高性能。





atomic：默认是有该属性的，这个属性是为了保证程序在多线程情况下，编译器会自动生]]></description><category></category></item></channel></rss>