1. iOS RunLoop

    RunLoop概念 RunLoop是通过内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象 没有消息处理时,休眠以避免资源占用;有消息需要处理时,立刻被唤醒 为什么main函数不会退出12345int main(int argc, char * argv[]) { @autoreleasepool { return UIAppli …

    继续阅读

  2. iOS 多线程相关之performSelector、死锁

    performSelector12345678910//在当前线程延迟1s执行,响应了OC语言的动态性:延迟到运行时才绑定方法[self performSelector:@selector(aaa) withObject:nil afterDelay:1];// 回到主线程,waitUntilDone:是否将该回调方法执行完再执行后面的代码/&# …

    继续阅读

  3. iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。initial view –> super view –> ….. –> view controller –> window –> Application –> AppDelegate 传递链:由系统向离用户最近的view传递。UIKit –> …

    继续阅读

  4. 一周年快乐

    去年这个时候发布了我的第一篇博文 — Hello World转眼已经写了一年了物是人非,感慨良多不管怎样我还是会继续坚持下去的,加油…圣诞节快乐…我的博客上线运行中… …

    继续阅读

  5. iOS 面试题-2019.上

    UIView和CALayer是什么关系 UIView继承自UIResponder类,可以响应事件 CALayer直接继承自NSObject类,不可以响应事件 UIView是CALayer的delegate(CALayerDelegate) UIView主要处理事件,CALayer负责绘制 每个UIView内部都有一个CALayer在背后提供内容的绘制和显示,并且UIView的尺寸样式都由内部 …

    继续阅读

  6. iOS 关于Other Linker Flags的作用

    在用第三方库时,我们常常在Xcode的Build Settings下Other Linker Flags里面加入-ObjC标志,它和Objective-C的一个重要特性:类别(category)有关 根据官方的解释,Unix的标准静态库实现和Objective-C的动态特性之间有一些冲突:Objective-C没有为每个函数(或者方法)定义链接符号,它只为每个类创建链接符号。这样当在一个静态库中 …

    继续阅读

  7. iOS 使用Jenkins持续集成(简称CI)

    安装jenkins1.1. 直接到官网下载安装包,通过安装包安装1.2. 通过Homebrew使用命令行安装1234561. 安装Homebrew$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)& …

    继续阅读

  8. iOS 插件化开发(动态库研究)

    framework是一种优秀的资源打包方式,我们平时看到的第三方发布的framework大部分都是静态库,苹果对iOS允许使用动态库,但是要利用动态库热更新,由于苹果的审核和签名技术,暂时还是不行,内部使用还是可行的 思路:在用户想使用某个功能的时候让其从服务器上将动态库文件下载到本地,然后手动加载动态库,实现功能的的插件化 创建动态库12345678910111213141516171 …

    继续阅读

  9. iOS 唤起APP之Universal Link(通用链接)

    iOS 9之前,一直使用的是URL Schemes技术来从外部对App进行跳转,但是iOS系统中进行URL Schemes跳转的时候如果没有安装App,会提示Cannot open Page的提示,而且当注册有多个scheme相同的时候,目前没有办法区分,但是从iOS 9起可以使用Universal Links技术进行跳转页面,这是一种体验更加完美的解决方案 什么是Universal Lin …

    继续阅读

  10. iOS 归档缓存

    代码如下: 头文件定义1234// 归档缓存内容+ (void)archiverObject:(id)object byKey:(NSString *)key withPath:(NSString *)path;// 解归档缓存内容+ (id)unarchiverObjectByKey:(NSString *)key withPath:(NSString …

    继续阅读