ARTS 09 - MessageMock:优雅的模拟 Objective-C 方法

Posted by Calvin on 2020-08-15

前言:什么是ARTS?

ARTS 源于耗子叔在极客时间的专栏《左耳听风》打卡活动。

Algorithm:每周至少做一个 Leetcode 的算法题。主要是为了编程训练和学习。

Review:阅读并点评至少一篇英文技术文章。主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你在日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要是为了建立你的影响力,能够输出价值观。

Algorithm

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

Python 3 代码:

class Solution:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''

Review

MessageMock : 优雅的模拟 Objective-C 方法

开源地址:MessageMock

在代码测试中,对于一些不容易获取的对象,可以虚拟(mock)出一个对象来帮助完成测试。在 iOS 中,已经有 OCMock 这样比较有名的开源框架去解决这个问题。但是 OCMock 在使用上的问题是比较繁琐麻烦,测试一个小的功能可能在使用上也比较麻烦。本文为这种场景提供了一种新的思路,基于 objc_msgSend 来进行方法的“模拟”和“校验”。

MessageMock 通过任意[target selector]调用命中目标方法:

  • 修改目标方法返回值、参数
  • 验证目标方法返回值、参数
  • 跳过目标方法调用
  • 获取目标方法命中次数

Tip

GitHub Readme Stats

一个可以自己部署的服务,生成个人 GitHub 账户的统计,可以插在自述文件里面。如图所示,你还可以自定义卡片样式和内容。

20200815001
20200815002
20200815003

Share

SHA-256 的原理(英文)

本文通过一个简单的例子,一步步演示 SHA-256 算法,如何将字符串变成一个256位的哈希值。