<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Do not just  be a pragrammer]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ShadowOfMaster</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ShadowOfMaster]]></copyright><item><title><![CDATA[iOS触摸事件理解]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/115326488</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/115326488</guid><author>ShadowOfMaster</author><pubDate>Tue, 30 Mar 2021 15:17:40 +0800</pubDate><description><![CDATA[## 如何确定由哪个视图响应触摸事件

解决这个问题之前，我们先看下几个与之相关的类。

### UITouch

触摸，UITouch保存着跟手指相关的信息，比如触摸的位置、时间、阶段等。

1. 当手指移动时，系统会更新同一个UITouch对象，使之能够一直保存该手指在的触摸位置。
  当手指离开屏幕时，系统会销毁相应的UITouch对象。
2. 一个手指触摸一次屏幕就会生产一个UITouch对象，多个手指同时触摸屏幕，就会生成多个UITouch对象。
3. 单个手指多次触摸屏幕（类似于双击等操作...]]></description><category></category></item><item><title><![CDATA[objc4源码编译与调试]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/112364087</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/112364087</guid><author>ShadowOfMaster</author><pubDate>Fri, 08 Jan 2021 15:11:08 +0800</pubDate><description><![CDATA[源码下载

在Apple Open Source上选择对应自己的macOS版本下，下载objc4即可。

笔者是macOS Catalina 10.15.6，所以选择的是objc4-787.1版本，顺便在该页面中下载Libc，dyld，libauto，libclosure，libdispatch，libpthread，xnu，libplatform这几个依赖库，编译objc4的时候需要用到。

解决编译错误

下载完成，解压之后我们打开工程文件，运行报错unable to find sdk 'macosx.]]></description><category></category></item><item><title><![CDATA[使用SourceTree拉取代码出现Permission denied (publickey)]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92735204</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92735204</guid><author>ShadowOfMaster</author><pubDate>Mon, 17 Jun 2019 22:39:49 +0800</pubDate><description><![CDATA[Git拉取远程代码 或者使用SourceTree使用远程URL(SSH方式)克隆到本地
显示Permission denied (publickey)
首先确保在账号后台已经添加SSH Key

如果尚未添加SSH Key:

1.打开终端 输入
    cat ~/.ssh/id_rsa.pub

如果终端出现以ssh-rsa开头一串字符串,表示已经生成了SSH Key,直接复制或者使用
   ...]]></description><category></category></item><item><title><![CDATA[LLDB调试增强插件Chisel安装与使用教程]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92735002</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92735002</guid><author>ShadowOfMaster</author><pubDate>Mon, 17 Jun 2019 22:38:50 +0800</pubDate><description><![CDATA[chisel是一款facebook出品的LLDB调试器增强插件,添加了诸如pviews,show,hide等命令,详细可以查看chisel wiki
安装
我们可以使用Homebrew来安装chisel,没有安装Homebrew的同学请戳Homebrew安装
已经安装了Homebrew可以直接使用下面的命令安装chisel
brew install chisel


执行命令结果如上图表示已经完成...]]></description><category></category></item><item><title><![CDATA[Git 常用命令详解(一)]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92734765</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92734765</guid><author>ShadowOfMaster</author><pubDate>Mon, 17 Jun 2019 22:37:52 +0800</pubDate><description><![CDATA[前言
做iOS开发将近三年了, 版本控制Git和SVN都有所涉猎, SVN使用的一团糟糕稀里糊涂, 这里不谈, 今天的主角是Git, 之前一直都多使用的是Source Tree这个工具, 对命令少有涉及, 这次详细了解下, 以作记录.
安装

Xcode安装, Xcode偏好设置中找到Downloads，选择“Command Line Tools，点击Install就可以完成安装了
使用Homeb...]]></description><category></category></item><item><title><![CDATA[iOS BLE蓝牙开发数据传输协议详解 常用算法(AES加密 HMAC_hash PRF)]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92734438</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/92734438</guid><author>ShadowOfMaster</author><pubDate>Mon, 17 Jun 2019 22:36:37 +0800</pubDate><description><![CDATA[前言
这段时间参与了一款与蓝牙外设交互的项目, 以前没有涉及过数据传输方面的开发, 踩了不少坑, 同时也学到了很多东西. 此时, 项目也即将进入尾声, 有时间把这些记录一二. 本人才疏学浅, 如有错误,大佬轻喷.
BLE4.0开发
这方面网上的Demo一大堆, 暂时不做太多的赘述, 只对坑点做一个摘要.

需求使然, 要对设备的接近远离有一个比较精确的计算, 使用的方案是对蓝牙的信号强度进行分析....]]></description><category></category></item><item><title><![CDATA[undefinded sysmbols __objc__类名编译错误]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/73467465</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/73467465</guid><author>ShadowOfMaster</author><pubDate>Mon, 19 Jun 2017 14:44:24 +0800</pubDate><description><![CDATA[1.Compile Sources没有导入文件
2.search path不对
3.重复编译,可能重复添加了 或者那个引用search path重复]]></description><category></category></item><item><title><![CDATA[copy和mutablecopy]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/52384398</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/52384398</guid><author>ShadowOfMaster</author><pubDate>Wed, 31 Aug 2016 14:03:15 +0800</pubDate><description><![CDATA[对于系统的非容器类对象，我们可以认为，如果对一不可变对象复制，copy是指针复制（浅拷贝）和mutableCopy就是对象复制（深拷贝）。 
如果是对可变对象复制，都是深拷贝，但是copy返回的对象是不可变的。 
系统的容器类对象：指NSArray，NSDictionary等。对于容器类本身，上面讨论的结论也是适用的,但是注意的是，容器内的元素内容都是指针复制。如果需要元素对象也是对象复制，就需要实]]></description><category></category></item><item><title><![CDATA[iOS国际化]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/51820315</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/51820315</guid><author>ShadowOfMaster</author><pubDate>Mon, 04 Jul 2016 13:37:33 +0800</pubDate><description><![CDATA[1、iOS程序名称国际化

1.1 新建一个Single View app模版项目，命名为Localization。



1.2 新建后，可以看到工作目录结构文件如下，单击InfoPlist.strings，查看右边的属性，在Localization栏添加语言。

    

1.3 添加完成后打开对应语言文件，比如English的添加

CFBundleDisplayN]]></description><category></category></item><item><title><![CDATA[[TwistedFate]iOS多线程编程GCD]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50525440</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50525440</guid><author>ShadowOfMaster</author><pubDate>Fri, 15 Jan 2016 18:59:13 +0800</pubDate><description><![CDATA[简介iOS有三种多线程编程的技术，分别是： 
（一）NSThread 
（二）Cocoa NSOperation 
（三）GCD（全称：Grand Central Dispatch） 
这三种编程方式从上到下，抽象度层次是从低到高的，抽象度越高的使用越简单，也是Apple最推荐使用的。三种方式的优缺点介绍：1）NSThread: 
优点：NSThread 比其他两个轻量级 
缺点：需要自己管理线程的]]></description><category></category></item><item><title><![CDATA[iOS_CoreData的使用]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50478412</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50478412</guid><author>ShadowOfMaster</author><pubDate>Thu, 07 Jan 2016 19:33:14 +0800</pubDate><description><![CDATA[Core Data数据持久化是对SQLite的一个升级，它是ios集成的，在说Core Data之前，我们先说说在CoreData中使用的几个类。

   （1）NSManagedObjectModel(被管理的对象模型)

           相当于实体，不过它包含 了实体间的关系

    (2)NSManagedObjectContext(被管理的对象上下文)

     ]]></description><category></category></item><item><title><![CDATA[[TwistedFate]NSURLSession]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50465240</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50465240</guid><author>ShadowOfMaster</author><pubDate>Tue, 05 Jan 2016 21:07:47 +0800</pubDate><description><![CDATA[//所有类型的task都要调用resume方法才会开始请求  
(IBAction)BlockButton:(id)sender { 
//快捷方式获得session对象 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURL *url = [NSURL URLWithString:@”http://mobile.ximalaya.]]></description><category></category></item><item><title><![CDATA[22 款开源的 iOS 应用菜单 (Menu) 控件]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50443565</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50443565</guid><author>ShadowOfMaster</author><pubDate>Thu, 31 Dec 2015 20:07:29 +0800</pubDate><description><![CDATA[PaperFoldMenuController

PaperFoldMenuController 是一个UITabBarController 的替换品,显示了视图控制器在表视图在屏幕的左边。你可以拖动 隐藏/显示左边的菜单。从菜单中选择左边的更改视图控制器在右边。PaperFoldMenuController使用视图控制器安全壳。...
Drop
 Down Menu

DIYMenu]]></description><category></category></item><item><title><![CDATA[[TwistedFate]UIWebView的简单使用]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50436190</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50436190</guid><author>ShadowOfMaster</author><pubDate>Wed, 30 Dec 2015 17:34:20 +0800</pubDate><description><![CDATA[UIWebViewUIWebView就是一个可以帮我们打开网站的浏览器界面,我们对这个页面操作就相当于浏览器操作UIWebView使用的三种情况
整个几面的排版比较复杂,需要很多判断
整个界面整体布局改变非常大
需要访问某个网站的时候
UIwebView的加载方式
利用requset加载
//  初始化一个NSURLRequset对象
NSURLRequest *request = [NSURLRe]]></description><category></category></item><item><title><![CDATA[[TwistedFate]多线程编程NSOperation]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50354539</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50354539</guid><author>ShadowOfMaster</author><pubDate>Fri, 18 Dec 2015 22:19:19 +0800</pubDate><description><![CDATA[常用开启多线程的方法
NSOperation   封装一下GCD的方法 提供OC的语法来使用GCD
2.GCD   官推 可以最大化的发挥多核CPU 是C语言的函数 
NSOperation 是一个抽象类
NSBlockOperation
NSInvocationOperation
线程队列
1.串行队列  主线程相当于一个串行队列 队列中的任务 需要一个执行完毕后 再执行下一个
2.并行队列  队]]></description><category></category></item><item><title><![CDATA[[TwistedFate]多线程编程NSThread]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50354198</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50354198</guid><author>ShadowOfMaster</author><pubDate>Fri, 18 Dec 2015 21:47:03 +0800</pubDate><description><![CDATA[多线程编程进程,线程
正在活动(运行的)一个应用程序,就是一个进程;
每一个进程都至少有一个线程,主线程
线程:每一个线程都是独立的,可以执行任务
除了主线程,剩下的都是子线程,子线程可以有很多个 ,但是线程是耗费资源的(一般不超过5条,3条为佳)
主线程操作的任务:一半时间UI界面的现实,按钮的点击,屏幕滚动,基本一切用户能看见的操作均在主线程中操作
比较大的耗时操作都可以在子线程中操作 比如:下]]></description><category></category></item><item><title><![CDATA[[TwistedFate]UICollectionView]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50268481</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50268481</guid><author>ShadowOfMaster</author><pubDate>Fri, 11 Dec 2015 20:46:05 +0800</pubDate><description><![CDATA[集合视图UICollectionViewLayout抽象类,具体功能由他的子类实现, 网状结构的布局创建一个网状的结构布局,设置具体的属性UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
//  最小行间距
    layout.minimumLineSpacing = 20;    //]]></description><category></category></item><item><title><![CDATA[[TwistedFate]数据库初级使用]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50223653</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50223653</guid><author>ShadowOfMaster</author><pubDate>Tue, 08 Dec 2015 20:25:57 +0800</pubDate><description><![CDATA[SQLite数据库使用步骤: 
1. 引入libsqlite3.0框架 
2. 在数据库操作类里 引入创建单例类实现数据库的管理使用//  单例的初始化方法
+ (SQLiteManager *)shareManager;//  插入数据
- (void)insertTableWithStudent:(Student *)stu;//  删除数据
- (void)deleteWithAge:(NSI]]></description><category></category></item><item><title><![CDATA[[TwistedFate]初级数据持久化]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50210749</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50210749</guid><author>ShadowOfMaster</author><pubDate>Mon, 07 Dec 2015 20:44:53 +0800</pubDate><description><![CDATA[初级数据持久化沙盒沙盒机制
每一个APP安装到手机上或者模拟器上, 都会自动生成三个文件夹   这三个文件夹叫沙盒 可以理解为这个APP的沙盒
每个APP的文件夹都是相对独立的 只能自己的应用去访问 不可以互相访问
文件夹中 存储的是 代码以外的 所有数据 例如(图片素材 声音 视频 文档等)也就是说 持久化文件(缓存文件)可以存储到  文件夹中
打开沙盒的各个文件夹路径- (void)path{]]></description><category></category></item><item><title><![CDATA[[TwistedFate]KVO监测Model图片加载]]></title><link>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50210447</link><guid>https://blog.youkuaiyun.com/ShadowOfMaster/article/details/50210447</guid><author>ShadowOfMaster</author><pubDate>Mon, 07 Dec 2015 20:17:14 +0800</pubDate><description><![CDATA[KVO监测Model图片加载使用上一篇的ImageDownLoader类 
目的:网络请求数据时,由于图片比较大,加载较慢,可以先加载数据,并显示,而图片可以之后分开加载,加载完再显示详细步骤
在加载数据的model类中添加属性,方法及遵守协议
<ImageDownLoadDelegate>
//  请求图片类
@property (nonatomic, retain) ImageDownLoade]]></description><category></category></item></channel></rss>