使用 libffi 实现 AOP 前言 众所周知,使用runtime的提供的接口,我们可以设定原方法的IMP,或交换原方法和目标方法的IMP,以完全代替原方法的实现,或为原实现前后相当于加一段额外的代码。 @interface ClassA: NSObject - (void)methodA; + (void)methodB; @end ... @implementation ClassA (Swizzle)... 作者 Assuner 日期 2018年02月06日 用代码理解 ObjC 中的发送消息和消息转发 今天我们主要以看代码写代码的形式聊聊消ObjC中的发送消息和消息转发。 当我们向一个对象(实例对象、类对象)发送一条消息时,对象可能是处理不了的,结果就是程序发生crash。当然,通过消息转发可以预防crash。现在我们就带着几个困惑:消息发送和处理的机制是什么样的?消息转发执行的时机和包含的步骤是什么样的?(为什么实际步骤是2步而不是很多人认为的3步)?消息转发的一些细节是什么样的?下面... 作者 Assuner 日期 2017年12月19日 如何将你的 CocoaPods 库升级到 Swift 4 零. 前言 Swift 版本升级嘛,大家应该都很熟练了,菜单 -> Edit -> Convert -> To Current Swift Syntax…,然后巴拉巴拉一顿操作。emmmn,抱歉,编译过了也不一定能正常使用。 这次 Swift 3 到 Swift 4 的更新和之前的大版本更新相比,已经平滑了很多,相较之前的动辄几百上千个 error,现在用 Xcode ... 作者 EyreFree 日期 2017年12月06日 【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第三部分】 原文链接:A Simple Object Model 作者信息:Carl Friedrich Bolz 上一篇:《【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第二部分】》 译者注:休息结束,我们继续 实例优化 虽然对象模型的在之前的几节中发生了很多行为变化,但在最后一节中,我们将在没有影响任何行为的情况下进行优... 作者 小鱼周凌宇 日期 2017年11月22日 【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第二部分】 原文链接:A Simple Object Model 作者信息:Carl Friedrich Bolz 上一篇:《【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第一部分】》 译者注:休息结束,我们继续 方法调用 现在我们的模型还缺少方法调用的功能,本章我们将会实现一个简单的继承模型。 def test_ca... 作者 小鱼周凌宇 日期 2017年10月31日 【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第一部分】 原文链接:A Simple Object Model 作者信息:Carl Friedrich Bolz Carl Friedrich Bolz是伦敦国王大学的研究员,对动态语言的实现及优化兴趣浓厚。他是 PyPy/RPython 的核心贡献者之一,并为 Prolog, Racket, Smalltalk, PHP 和 Ruby 等语言贡献代码。 引子 面向对象开发是现今最主流的... 作者 小鱼周凌宇 日期 2017年10月08日 基于Apache搭建HTTP/HTTPS/正向代理/反向代理服务器 实际环境 系统环境 macOS Sierra(10.12.5) Apache Apache/2.4.25 (Unix) OpenSSL OpenSSL 1.0.2l 引言 Mac系统默认安装了Apache服务器,你只需要在终端里输入sudo apachectl start命令,然后打开浏览器,输入网址http://localhost/index,显示如下图: 恭喜你,... 作者 boborz 日期 2017年07月25日 GitHub Wiki 页面的添加和设置 目前大家在 GitHub 上发布的项目,一般使用 Markdown 来编写项目文档和 README.md 等。Markdown 一般情况下能够满足我们的文档编写需求,如果使用得当的话,效果也非常棒。不过当项目文档比较长的时候,阅读体验可能就不是那么理想了,这种情况我想大家应该都曾经遇到过。 GitHub 每一个项目都有一个独立完整的 Wiki 页面,我们可以用它来实现项目信息管理,为项目提... 作者 EyreFree 日期 2017年07月11日 简介我的 Git Work Flow 重要性 我们从重要性说起。 团队开发中要重视有洁癖的人,这种人往往对糟糕的工作流不断提出意见、对 Git 的使用方式提出要求。如果你的团队中这种人正在不断的被忽视,那么你的团队一定出现了管理混乱、代码质量不高等等等等问题。 统一的工作流程是至关重要的,不管对于哪一个行业的作业来说都一样。对于我们开发人员,工作流包含了开发时 Git 的使用规范、Repo 管理的规范、测试过程的规范、设计... 作者 小鱼周凌宇 日期 2017年05月08日 GitHub 项目徽章的添加和设置 许多同学在 GitHub 上发布了自己的开源项目,有辛苦开发的实用工具、构思巧妙的开源库、别具一格的 App、精心整理的示例代码等等。 自己花了大把时间和精力构建的项目,当然是希望能够得到更多人的关注,被更多的人知晓或者使用。如何更好滴向他人展示自己的项目,介绍项目相关信息呢?用一些通用的小图标来描述项目相关信息不失为一种很棒的选择,几个好看的徽标能够为自己的项目说明增色不少! 提示:因... 作者 EyreFree 日期 2017年05月03日 Weex 中别具匠心的 JS Framework 前言 Weex为了提高Native的极致性能,做了很多优化的工作 为了达到所有页面在用户端达到秒开,也就是网络(JS Bundle下载)和首屏渲染(展现在用户第一屏的渲染时间)时间和小于1s。 手淘团队在对Weex进行性能优化时,遇到了很多问题和挑战: JS Bundle下载慢,压缩后60k左右大小的JS Bundle,在全网环境下,平均下载速度大于800ms(在2G/3G下甚至... 作者 一缕殇流化隐半边冰霜 日期 2017年04月25日 C 语言结构体内存布局问题 引言 C语言结构体内存布局是一个老生常谈的问题,网上也看了一些资料,有些说的比较模糊,有些是错误的。本人借鉴了前人的文章,经过实践,总结了一些规则,如有错误,希望指正,不胜感激。 实际环境 系统环境 macOS Sierra(10.12.4) IDE Xcode(8.3) 概述 影响结构体内存布局有位域和#pragma pack预处理宏两个情况,下面分情况说明。 正常情况 ... 作者 boborz 日期 2017年04月25日 Weex 事件传递的那些事儿 前言 在前两篇文章里面分别谈了Weex如何在Native端初始化的和Weex是如何高效的渲染Native的原生UI的。Native这边还缺一块,那就是Native产生的一些事件,是怎么传回给JS的。这篇文章就详细分析这一部分。 目录 1.Weex的事件类型 2.Weex的事件传递 一.Weex的事件类型 在Weex中,目前最新版本中事件总共分为4种类型,通用事件,App... 作者 一缕殇流化隐半边冰霜 日期 2017年04月17日 由 FlexBox 算法强力驱动的 Weex 布局引擎 前言 在上篇文章里面谈了Weex在iOS客户端工作的基本流程。这篇文章将会详细的分析Weex是如何高性能的布局原生界面的,之后还会与现有的布局方法进行对比,看看Weex的布局性能究竟如何。 目录 1.Weex布局算法 2.Weex布局算法性能分析 3.Weex是如何布局原生界面的 一. Weex布局算法 打开Weex的源码的Layout文件夹,就会看到两个c的文件,... 作者 一缕殇流化隐半边冰霜 日期 2017年04月05日 SSH-Keygen 中生成的 Randomart Image 是什么 randomart image 出现在哪里 通常我们在生成 SSH Key 的时候会用到 ssh-keygen 命令,在生成结束后,会输出类似如下的内容,这个 randomart image 是什么呢? The key's randomart image is: +--[ RSA 2048]----+ | o=. | | o o++E | | ... 作者 小鱼周凌宇 日期 2017年03月27日 Weex 是如何在 iOS 客户端上跑起来的 前言 2016年4月21日,阿里巴巴在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请。Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。 近一年来,ReactNative 和 Weex 这些跨平台技术对Native开发者来说,冲击是巨大的。Native在开发App的时候存在一些弊端,... 作者 一缕殇流化隐半边冰霜 日期 2017年03月20日 Older Posts →