问题标签 [method-swizzling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
465 浏览

swift - Swizzle `init` 并调用内部的实际实现,Swift 4

我想调酒init(frame:)NSView但在里面打电话是真实的init(frame:)。这可能吗?我知道,我可以通过子类化和覆盖来实现相同的目标,但是在所有地方都需要改变它。我不知道如何正确实现 swizzled 方法来避免递归。我的代码:

我也尝试了几乎相同的方法,但使用convenience init并得到了递归。任何帮助,将不胜感激。

0 投票
1 回答
779 浏览

objective-c - 如何调配初始化方法?

我有一个带有 init 方法的类 MyOldController

我想将这个初始化方法转换为另一个,这是我的 swizzle 代码

我试着写这个

但它会丢弃错误在此处输入图像描述

然后我将 init 方法重命名为此并更新 (void)swizzleMethods

错误消息消失但 swizzle 不起作用。它只是调用旧的初始化方法,而不是我的新方法。

我错过了哪一点?初始化方法的调配有什么特殊的方法吗?

0 投票
2 回答
636 浏览

ios - Swizzling UIResponder Touch 事件不调用原始方法实现

我正在尝试UITouch通过创建UIResponder扩展来调整生命周期事件。以下是描述touchesBegan.

然后我像这样在我的应用程序中调用它-

我看到的是-“调用了 swizztouchesBegan 事件!” 被打印出来,我开始创建触摸元数据的字典。但是,它看起来并没有调用原始实现,例如,假设在我的代码中的某个地方,在表格视图控制器中,我编写了以下内容 -

这个被覆盖的 touchesBegan 没有被调用 - 可能是什么问题?我已经通过再次调用 swizzled 来从 swizzled 内部调用原始实现(从而确保调用原始实现。)

PS/附录:我已经能够通过覆盖UIView扩展中的触摸方法来使其工作,如下所示。有人可以指出使用这种方法比使用这种方法有什么缺点吗?

0 投票
1 回答
598 浏览

macos - mach_override() 函数在 mojave OSX 10.14 中失败

我有一个小项目,它使用 Jonathan 'Wolf' Rentzsch 的 mach_override() 在 MAC 中实现函数挂钩:https ://github.com/rentzsch/mach_override

我已经从 mac 钩住了 kextstat 进程的功能之一。

所以当我执行

$kextstat

OSX 正在杀死这个进程,说下面的错误:

代码签名:进程 2211[kextstat]:从文件“/private/var/db/dyld/dyld_shared_cache_x86_64h”中的偏移量 0xca53000 拒绝地址 0x7fff5132d000 处的无效页面(cs_mtime:1531207073.366350606 == mtime:1531207073.3066350signed :0 nx:0 wpmapped:1 脏:1 深度:2)

我的动态库是代码签名的。在我最初的观察中,我可以得出结论 mach_override() 函数在以下代码中失败:

atomic_mov64((uint64_t *)originalFunctionPtr, jumpRelativeInstruction);

上面的代码可以找到:mach_override.c:342 https://github.com/rentzsch/mach_override

0 投票
0 回答
77 浏览

ios - ObjC SDK 中的方法调配

我正在编写一种新HTTP Library的 SDK。为了实现横切关注点,我们计划编写类似于 c# 的中间件支持,即处理重试、重定向、日志记录等的机制。

使用方法调配来调配一些NSURLSession方法以实现上述目标是一个好主意吗?

0 投票
1 回答
90 浏览

ios - 为什么这个 UIViewController 方法 swizzling 不起作用?

我正在尝试NSHipster Fake Book的代码示例来调整 UIViewController的viewWillAppear:方法。但似乎它没有按预期工作,因为该xxx_viewWillAppear:方法从未被调用过。我只是不知道为什么。请帮助我,谢谢。

0 投票
2 回答
199 浏览

ios - 调用原始方法时,Xamarin 方法在设备上调用失败

以下代码在模拟器中工作,但在调用时在设备上失败_originalSetTextMethod(self, stringParam)

我怀疑这个问题与此有关,但无法确定 C# 中的适当语法:https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit。 html#//apple_ref/doc/uid/TP40013501-CH3-SW22

任何人都可以就如何在设备上运行它提供建议吗?谢谢。

0 投票
0 回答
98 浏览

ios - 多方法混用时如何找到方法的原始实现

例如,如果原产地 IMP 是UIViewController - ViewDidLoad

在我的项目中,可能会喜欢main Project+ many other SDK(frameworks),如果其他团队成员使用相同的方法,比如UIViewController - ViewDidLoad,我如何确定或如何找出ViewDidLoadswilling 的来源 IMP?导致其他队员也需要同样的方法?

0 投票
1 回答
1734 浏览

ios - ios swizzle 更好理解

我有一个带有此代码的 UIViewController:

然后我有一个带有 UIViewController 类别的框架,它以这种方式运行:

输出是 SWIZZLED,然后是 CLASIC。

现在我的问题是:如果在我的视图控制器中我评论了 [super viewDidAppear:animated]; 然后不再调用 swizzled 方法;这是为什么?我理解了大部分方面,但似乎这一方面不知何故滑倒了。

0 投票
0 回答
292 浏览

ios - 在 Objective-C 中替换(调配)整个类(使用所有实例和静态方法)

我是方法调配的新手,现在我想在 iOS 上做更多的事情:Objective-C 中是否有一种简单/优雅的方法可以将现有类 (ClassA) 的所有调用重定向到另一个类(ClassB ,只要它具有完全相同的方法)。我知道可以使用单一方法(方法调配)来做到这一点,但是整个类呢?

  • 获取所有类的方法列表并一一调整它们?
  • 只调动类的 init 方法?
  • 还有其他方法吗?

我要替换的类有很多静态方法,我不想接触原始代码。