Wrappres' Studio.

Wrappres' Studio.

Work Hard, Play Harder

解析 UIKit
UIViewController生命周期 initWithCoder: awakeFromNib loadView viewDidLoad viewWillAppear: viewWillLayoutSubviews viewDidLayoutSubviews viewDidAppear: viewWillDisappear: viewDidDisappear: dealloc 说一下控制器收到内存警告会如何处理当系统内存告急时,会接收到 didReceiveMemoryWarning。 这是属于 ViewController 的方法,当 ViewController 接收到 didR...
Runloop 的理解
RunloopRunloop 是什么Runloop 实际是一个对象,这个对象一直在循环中来处理 App 运行过程中各种事件(触摸事件,UI 刷新事件,定时器事件,Selector 事件),从而保持程序的持续运行。Runloop 在没有事件需要处理的时候,会使线程进入睡眠模式,从而节省 CPU 资源,提高程序性能。 Runloop 与线程的关系线程的作用是用来执行一个或多个任务。在默认情况下,线程执行完之后就会退出。如果需要线程能一直不断的处理任务,且并不会退出,这时就需要用到 Runloop。 一个线程对应一个 Runloop 对象,每条线程都有唯一一个对应的 Runloop 对象。 ...
iOS 中关于 weak 的故事
weak iOS 中 weak 是不得不了解的内容希望能通过本文把 weak 这件事讲清楚 作用在所有使用引用计数的语言中,都会面临一个问题,那就是循环引用。两个对象互相引用,或多个对象之间,形成环形引用,造成类似死锁互相等待的情况,导致对象一直无法被释放。引入 weak 旨在解决循环引用的问题。 原理SideTablesSideTables 是一个全局的 hash 数组,里面存储着 SideTable 数据,且长度为 64。因此可以说,一个对象对应一个 SideTable ,但一个 SideTable 有时也会对应多个对象,因为 SideTables 的长度只有 64,因此很多对象会...
iOS 知识补齐-多线程
概念解释线程安全线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。 线程同步线程同步即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。 pthreadPOSIX 线程(英语:POSIX Threads,常被缩写 为 Pthreads)是 POSIX 的线程标准,定义了创建和操纵线程的一套 API。实现 POSIX 线程标准的库常被称作 Pthreads,一般...
My Mac App List
受郝海龙的这篇微博启发我决定也列一下我现在正在使用的Mac App同时也推荐一下My Mac App List by Hailong Hao 开发Xcode iOS程序员的必备工具 Visual Studio Code 当下比较优秀的编辑器,而且开源免费,作用域包括但不限于前端开发 Sourcetree 功能强大的Git客户端 Postman 用于模拟发送请求,以便调试 iTerm MacOS上终端的代替,功能强大,配置自由度高,建议配合ZSH使用 Go2Shell 可以在finder中快速启动Command Line的小工具,免去的在终端中用繁琐的命令进入到合适的路径 ...
算法
本文算法实现的语言为Swift Hash 算法散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或 hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。 不借用第三个变量,如何交换两个变量的值?要求手动写出...
Wrappers' Swift Style Guide
本文参考Airbnb’s Swift Style Guide总结出我个人认为最合适的代码风格感谢Airbnb Goals(目标) 让阅读和理解代码更加简单 使代码更易维护 减少小的编程错误 减少代码的认知负担 更注重代码的逻辑,而不是代码风格 PS:简洁不是我们最主要的追求。只有代码质量得到保证(例如:可读性等),我们才会适当追求简洁。 Xcode Formatting(Xcode 样式) 每行中最多包含 100 个单词 用 4 个空格来进行缩减 在每一行末尾以及在文件的末尾不要留有无用的空格 Naming(命名)类和协议使用大驼峰式大小写(也叫帕斯卡命名法 PascalCase...
iOS 知识补齐-Runtime
描述OC 语言是一门动态语言,会将程序的一些决定工作从编译期推迟到运行期。所以 OC 不止需要依赖编译器,还需要依赖运行时环境。OC 语言在编译期都会被编译为 C 语言的 Runtime 代码。二进制执行过程中执行的都是 C 语言代码。OC 的类本质上都是结构体。在编译时都会以结构体的形式被编译到二进制中。Runtime 是一套由 C,C++,汇编实现的 API,所有的方法调用都叫做发送消息。Runtime 在 NSObject 中定义了一些基础操作。 数据结构简单解释一下下面这张图:一个普通的 objc_object(实例对象)中有一个 isa 指针,这个指针指向的是该实例对象所对应的...
组件化第一步,创建私有 Pod
关于组件化,目前比较流行的方案大概有三种:Router, Protocol, Target-Action。不论是选择哪一种方案,都需要通过建立私有 Pod 来管理项目。本文希望通过建立一个组件化中常用的Base库能将这个事情讲清楚。 创建 Pod创建 Base 库的 podspec选择合适的本地路径创建modularization文件夹其中的podspec包含了这个库的信息(包括名称,版本和描述等).下面是官方定义: A specification describes a version of Pod library. It includes details about where...
avatar
Wrappers
rich and money