JRSwizzle 2.0.0

JRSwizzle 2.0.0

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新发布Sep 2023

由 . 维护



JRSwizzle 2.0.0

  • 作者
  • Jonathan 'Wolf' Rentzsch

JRSwizzle

描述

JRSwizzle是一种源代码包,提供单一、简单、正确且一致的接口,用于在许多版本的Mac OS X、iOS、Objective-C和运行时架构之间交换Objective-C方法实现("方法交换")。

更简单地说:JRSwizzle希望成为您所有方法交换需求的一站式商店。

下载

$ cd /path/to/top/of/your/project
$ git submodule add git://github.com/rentzsch/jrswizzle.git JRSwizzle
$ git submodule init && git submodule update

# OPTIONAL: Execute the following commands if you want to explicitly peg
# to a certain version. Otherwise `git submodule update` will keep you
# current with HEAD.

$ cd JRSwizzle
$ git checkout v1.0

存在的原因

  • 简单:只需这样做: [SomeClass jr_swizzle:@selector(foo) withMethod:@selector(my_foo) error:&error]; Voila。
  • 正确:方法交换和方法继承之间存在微妙的交互。遵循Kevin Ballard的脚步,这个包会“做正确的事”。
  • 兼容性:JRSwizzle应该在不关心任何版本的Mac OS X和iOS上都能正常工作。以下是完整的兼容性列表
    • Mac OS X v10.3/ppc (Ballard实现)
    • Mac OS X v10.4/ppc (Ballard实现)
    • Mac OS X v10.4/i386 (Ballard实现)
    • Mac OS X v10.5/ppc (method_exchangeImplementations+Ballard实现)
    • Mac OS X v10.5/i386 (method_exchangeImplementations+Ballard实现)
    • Mac OS X v10.5/ppc64 (method_exchangeImplementations+Ballard实现)
    • Mac OS X v10.5/x86_64 (method_exchangeImplementations+Ballard实现)
    • iOS 2.0+ (method_exchangeImplementations+Ballard实现)
  • 健壮:所有参数都会进行检查,JRSwizzle返回一个具有高质量诊断的可选的 NSError

支持

请使用JRSwizzle的GitHub Issues标签 记录错误或功能请求。

要贡献,请Fork此项目,提交您的更改,然后发送给我一个拉取请求。

比较

至少有四种方法交换实现。以下是比较图表,帮助您了解它们之间的关系以及JRSwizzle为什么存在。

场景 交换技术 方法实现 正确行为 10.4 64位
1 经典 直接 YES YES NO
2 经典 继承 NO YES NO
3 Ballard 直接 YES YES NO
4 Ballard 继承 YES YES NO
5 Apple 直接 YES NO YES
6 Apple 继承 NO NO YES
7 JRSwizzle 直接 YES YES YES
8 JRSwizzle 继承 YES YES YES

许可

源代码在MIT许可下分发。这是最简单、最宽松的许可。

版本历史

  • v1.0: 2012年3月2日

  • v1.0d1: 2009年5月31日

    • [修复] 通过将 hoisted_method_list->obsolete 清零来安抚 valgrind,它似乎会读取。(Daniel Jalkut)

    • [修复] Xcode 3.2 现在明显需要对 10.3 目标显式设置 ARCHS。(rentzsch

  • v1.0d0: 2009年4月9日

    • 迁移到 github。
  • v1.0d0: 2007年12月28日

    • 开发中。