<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hou_manager的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hou_manager</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hou_manager]]></copyright><item><title><![CDATA[iOS在手动kill进程时，再次调用了main函数的初始化流程问题排查]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/116062576</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/116062576</guid><author>hou_manager</author><pubDate>Fri, 23 Apr 2021 16:54:14 +0800</pubDate><description><![CDATA[iOS 应用在手动kill进程时，却再次调用了main函数的初始化，进而调用了AppDelegate的相关方法，进一步调用了部分页面的生命周期；
现象：app启动时没有调用部分接口，而是kill进程时调用了，再一些业务场景内是不能满足业务需求的
排查原因如下：
app的通知角标显示清除功能相关代码造成
- (void)bk_clearBadge {
    
    // 注释iOS11及以上代码，在iOS11及以上的APP沙盒内查看启动次数
    if (@available(iOS 11.0, *))]]></description><category></category></item><item><title><![CDATA[什么短信隐私政策]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/112124090</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/112124090</guid><author>hou_manager</author><pubDate>Sat, 02 Jan 2021 22:00:52 +0800</pubDate><description><![CDATA[【特别提示】请您仔细阅读我们的《什么短信隐私政策》并确定了解我们对您个人信息的处理规则。阅读过程中，如您有任何疑问，可及时与我们取得联系。如您不同意协议中的任何条款，您应立即停止访问或使用什么短信功能。
生效日期：2020年3月18日
一、我们处理个人信息的总原则
什么短信不收集、存储、上传您的任何信息，永不会让应用使用网络权限，亦称为什么短信是一款完全离线的应用。此外，如果您希望将自己的短信提供给我们，会通过该应用以外的方式提交给我们，我们会将您提交的短信进行脱敏处理，不会泄露您任何信息。
二、本隐私政策]]></description><category></category></item><item><title><![CDATA[cocoapods-ybin二进制源码映射使用教程]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/108414363</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/108414363</guid><author>hou_manager</author><pubDate>Sat, 05 Sep 2020 01:02:07 +0800</pubDate><description><![CDATA[一、背景
  随着项目业务的不断迭代和新增，每个业务线负责不同的功能模块，组件化势必是需要进行的工作。业界内，无论是哪种组件化方案，目的是一样的，分离业务和功能。
  组件化虽好，但是组件化只是将不同的业务分离或者不同的功能分离和分层，实际上还是在一个代码池里每次 build 需要进行编译、汇编、链接等过程。每次编译的占用的时间还是挺奢侈的，在编译速度上并没有提升。pod install 来回切换二进制和源码也更是一件可行不可取的开发模式。
  cocoapods-ybin 解决二进制和源码之间的映射问题，]]></description><category></category></item><item><title><![CDATA[Mac 上如何正确的安装Python2.7和Python3]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79555809</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79555809</guid><author>hou_manager</author><pubDate>Wed, 14 Mar 2018 15:50:38 +0800</pubDate><description><![CDATA[一、Python 介绍

Python介绍

Python3在2008年12月3日正式发布, 但是有很多library还是使用Python2.7，所以需要在Mac里面同时装这两个版本，并且和系统所使用的Python区分开来呢？今天要写的是如何第一次就正确安装好，并且切换预设版本，不在误用系统的Python。



二、安装

STEP 1 安装Xcode

安装完成后 安装 Xcode comma...]]></description><category></category></item><item><title><![CDATA[iOS横向滚动的scrollView和系统pop手势返回冲突的解决办法]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79554303</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79554303</guid><author>hou_manager</author><pubDate>Wed, 14 Mar 2018 14:33:56 +0800</pubDate><description><![CDATA[原理：

scrollView的pan手势会让系统的pan手势失效，所以我们只需要在系统手势失效且scrollView的位置在初始位置的时候让两个手势同时启用就可以了

1.首先自定义一个scrollView，比如：CustomScrollView，遵守协议，然后在实现文件中写如下代码：

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestur...]]></description><category></category></item><item><title><![CDATA[iOS链接跳转到App]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79553522</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79553522</guid><author>hou_manager</author><pubDate>Wed, 14 Mar 2018 13:45:30 +0800</pubDate><description><![CDATA[可行的方案大概有三种：

一、直接使用URL Scheme。(优点：十分简单，在plist文件中配置一个scheme，点击短信中的scheme或者将scheme输入到浏览器中就可以直接跳到App中。 缺点：当手机上没有安装App时，短信中点击scheme会没有反应，浏览器中会访问失败。而且在微信和QQ中这种方式是被禁用的)。

二、使用iOS9之后的新特性，通用链接（Universal Links...]]></description><category></category></item><item><title><![CDATA[教你深刻理解Runtime机制]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79544375</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79544375</guid><author>hou_manager</author><pubDate>Tue, 13 Mar 2018 18:20:44 +0800</pubDate><description><![CDATA[教你深刻理解Runtime机制



什么是Runtime？



概念

Objective-C是基于C语言加入面向对象特性和消息转发机制的动态语言，这就是说它不仅需要一个编译器，还需要Runtime系统动态的创建类和对象，进行消息发送和转发。关于Runtime概念众说纷纭。理解Runtime，我们从源码开始…. 源码介绍 Runtime在实际开发中，其实就是一组C语言函数。

官方介绍：官方文...]]></description><category></category></item><item><title><![CDATA[runtime如何实现weak变量的自动置nil？]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79376681</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79376681</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 14:19:20 +0800</pubDate><description><![CDATA[
runtime 对注册的类， 会进行布局，对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key，当此对象的引用计数为0的时候会 dealloc， 在这个 weak 表中搜索，找到所有以a为键的 weak 对象，从而设置为 nil。
weak 修饰的指针默认值是 nil （在Objective-C中向nil发送消息是安全的）
...]]></description><category></category></item><item><title><![CDATA[能否想编译后的类中添加实例变量,能否像运行时创建的类添加实例变量?]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79376656</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79376656</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 14:17:28 +0800</pubDate><description><![CDATA[
1.不能向编译后得到的类增加实例变量
2.能向运行时创建的类中添加实例变量


原因:


a.编译后的类已经注册在runtime中,类结构体中的objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,runtime会调用class_setvarlayout或class_setWeaklvarLayout来处理strong weak引用.所以不能向存在的...]]></description><category></category></item><item><title><![CDATA[objc在向一个对象发送消息时，发生了什么？]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79376561</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79376561</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 14:10:32 +0800</pubDate><description><![CDATA[objc在向一个对象发送消息时，runtime库会根据对象的isa指针找到该对象实际所属的类，然后在该类中的方法列表以及其父类方法列表中寻找方法运行，然后在发送消息的时候，objc_msgSend方法不会返回值，所谓的返回内容都是具体调用时执行的

objc中向一个nil对象发送消息将会发生什么？

如果向一个nil对象发送消息，首先在寻找对象的isa指针时就是0地址返回了，所以不会出现任何错误。...]]></description><category></category></item><item><title><![CDATA[3种类型的block]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79376465</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79376465</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 14:01:13 +0800</pubDate><description><![CDATA[根据isa指针，block一共有3种类型的block

_NSConcreteGlobalBlock 全局静态

_NSConcreteStackBlock 保存在栈中，出函数作用域就销毁

_NSConcreteMallocBlock 保存在堆中，retainCount == 0销毁...]]></description><category></category></item><item><title><![CDATA[iOS多线程—线程间的通信]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79376458</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79376458</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 14:00:49 +0800</pubDate><description><![CDATA[介绍

线程间通信：在1个进程中，线程往往不是孤立存在的，多个线程之间需要经常进行通信

线程间通信的体现

1个线程传递数据给另1个线程

在1个线程中执行完特定任务后，转到另1个线程继续执行任务

线程间通信常用方法


(void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL...]]></description><category></category></item><item><title><![CDATA[iOS中，@dynamic关键字和@synthesize关键字是用来做什么的？]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79374134</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79374134</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 10:27:27 +0800</pubDate><description><![CDATA[
@synthesize：如果不实现setter和getter方法,将按照编译器的规则自动生成setter和getter方法.
@dynamic:直接或动态的执行setter和getter方法.通常自己实现setter和getter方法,我们基本上不会用到.


@dynamic 
关键词的场景，之前@dynamic只在NSManagedObject的子类中遇到过，因为NSManagedObjec...]]></description><category></category></item><item><title><![CDATA[MVC、MVVM和MVP的区别]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79373724</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79373724</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 10:00:01 +0800</pubDate><description><![CDATA[MVC

MVC模式（Model-View-Controller）是软件工程中的一种软件架构模式，把软件系统分为三个基本部分：模型（Model）、视图（View）和控制器（Controller）。

MVC模式最早由Trygve Reenskaug在1978年提出[1] ，是施乐帕罗奥多研究中心（Xerox PARC）在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式...]]></description><category></category></item><item><title><![CDATA[为什么说Objective-C是一门动态的语言？]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79373616</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79373616</guid><author>hou_manager</author><pubDate>Mon, 26 Feb 2018 09:51:59 +0800</pubDate><description><![CDATA[什么叫动态静态

静态、动态是相对的，这里动态语言指的是不需要在编译时确定所有的东西，在运行时还可以动态的添加变量、方法和类

Objective-C 可以通过Runtime 这个运行时机制，在运行时动态的添加变量、方法、类等，所以说Objective-C 是一门动态的语言



其他说法

Objective-C 是C 的超集，在C 语言的基础上添加了面向对象特性，并且利用Runtime 这个运...]]></description><category></category></item><item><title><![CDATA[Elasticsearch 和插件 elasticsearch-head 安装详解]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/79203735</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/79203735</guid><author>hou_manager</author><pubDate>Tue, 30 Jan 2018 11:21:27 +0800</pubDate><description><![CDATA[一、Elasticsearch 安装

什么是 Elasticsearch ？ 
Elasticsearch 是一个基于 Apache Lucene(TM) 的开源搜索引擎。无论在开源还是专有领域，Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。并通过简单的 RESTful API 来隐藏 Lucene 的复杂性，从而让全文搜索变得简单。

Elasticsearch]]></description><category></category></item><item><title><![CDATA[git小技巧：git blame && git show 查看某一行代码的修改历史]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/78851305</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/78851305</guid><author>hou_manager</author><pubDate>Wed, 20 Dec 2017 11:31:00 +0800</pubDate><description><![CDATA[先查看某行代码由谁写的，在哪个commit中提交的：git blame file_name其显示格式为：  
commit ID | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码 类似于下面这样:从而获得commit ID，我们就可以知道commit ID了，然后使用命令：git show commitID来看]]></description><category></category></item><item><title><![CDATA[android基本架构]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/78847197</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/78847197</guid><author>hou_manager</author><pubDate>Tue, 19 Dec 2017 20:50:18 +0800</pubDate><description><![CDATA[Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik，并在Dalvik虚拟机上搭建了一个JAVA的application framework，所有的应用程序都是基于JAVA的application framework之上。 
Android主要应用于ARM平台，但不仅限于ARM，通过编译控制，在X86、MAC等体系结构的机器上同样可以运行。android分为四个层，从高层]]></description><category></category></item><item><title><![CDATA[Python pip install requests产生的错误]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/78818801</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/78818801</guid><author>hou_manager</author><pubDate>Sat, 16 Dec 2017 11:09:10 +0800</pubDate><description><![CDATA[错误Exception:Traceback (most recent call last):  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main    status = self.run(options, args)  File "/Library/Py]]></description><category></category></item><item><title><![CDATA[UIViewAnimation动画过程中的手势响应]]></title><link>https://blog.youkuaiyun.com/hou_manager/article/details/78813201</link><guid>https://blog.youkuaiyun.com/hou_manager/article/details/78813201</guid><author>hou_manager</author><pubDate>Fri, 15 Dec 2017 14:57:47 +0800</pubDate><description><![CDATA[UIView动画以下方法在动画过程中手势交互默认是关闭的。+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);]]></description><category></category></item></channel></rss>