问题标签 [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 回答
353 浏览

objective-c - Objective-C 方法调配性能

在 Objective-C 中使用方法调配时会产生哪些性能损失?

如果有的话,哪些编译器优化会因消息混合而失败?

0 投票
0 回答
287 浏览

ios - swizzle popViewControllerAnimated 时的 EXC_BAD_ACCESS:

为了记录控制器之间的导航,我使用了 -popViewControllersAnimated: 方法的 swizzling。有时它会导致 EXC_BAD_ACCESS 出现奇怪的崩溃。可能是什么原因?

0 投票
0 回答
519 浏览

android - Android 是否有类似 iOS 方法调配的功能(用于 PhoneGap 插件初始化)?

我正在为 iOS 和 Android 编写一些包装第三方原生 SDK 的 PhoneGap 插件。在 iOS 的情况下,我可以使用 swizzling 来添加行为来AppDelegate初始化这些库。

现在我需要为 Android 做同样的事情,我现在确定如何去做。例如,我现在正在使用AppsFlyer SDK,这就是文档所说的初始化方式:


AppsFlyer Android SDK 文档


有没有在 PhoneGap 插件中做这样的事情的技术?我需要能够从头开始构建项目,而 Android Studio 项目本身不受源代码控制。

谢谢!

0 投票
0 回答
91 浏览

objective-c - 调和一些保留的东西

大家好,我不太明白retain

这里有这段代码:

我正在尝试调整它,所以每当他们要求带有名称的图像时,NSApplicationIcon我都会给它我的自定义图标。我仍然有时会看到原始图标回来。我想是因为这个保留的东西吗?我对吗?是否可以清除保留?这将使我的调酒工作 100% 的时间而不是像现在这样只有 80% :(

我在这里读到了,retain但我无法应用它来帮助我解决上述情况:http: //www.cocoawithlove.com/2010/06/assign-retain-copy-pitfalls-in-obj-c.html

非常具体地,我想在这里调整一下:https ://dxr.mozilla.org/mozilla-central/source/widget/cocoa/nsMacDockSupport.mm?offset=200#140

0 投票
1 回答
3697 浏览

ios - 方法调配不起作用

我想使用方法调配,但我什至无法获得简单的示例来为我工作。我可能误解了这个概念是什么,但据我所知,它允许交换方法实现。

给定两种方法,A 和 B,我想交换它们的实现,以便调用 A 来执行 B。我遇到了一些 swizzling 的例子(example1example2)。我用一个类创建了一个新项目来测试它。

然后我尝试执行它

预期的输出是“B”,但仍在打印“A”。正如您从我的代码中看到的那样,我已经包含IMP了混合操作之前和之后的每个打印件。这些打印显示交换确实发生了,但输出保持不变。

输出:

在使这些更改生效时,我有什么遗漏吗?

PS。目前使用 XCode 7.0.1

0 投票
1 回答
665 浏览

ios - Objective-C,iOS 9 中的高级方法?

问题很简单。我需要和往常一样 - 如何用我的方法替换原始方法,但@selector(presentViewController:animated:completion:)在 iOS9 中?它仅适用于 iOS9 模拟器,不适用于真实设备。

是的,此代码被调用,但随后您得到EXC_BAD_ACCESS.

为了测试它,我从“Master-Detail 模板”创建了一个测试应用程序,添加了一个按钮并添加了以下代码:

更新

几乎相同的代码写在 NSHipster 网站上

更新

警告!这个错误在非常随机的设备上重现(在我的情况下是 iphone5 + ios9.0,但其他用户有更新的设备和 iOS9.1)。

0 投票
1 回答
555 浏览

ios - 使用 StaticString 在 Swift 中调动

我正在尝试调配一个包含 StaticString 参数的 Swift 函数。

这是我尝试过的:

但是,这不起作用,如果我将 str 的类型更改为 String,我们可以正常 swizzle,任何人都有机会 swizzle 带有 StaticString 类型参数的函数可以帮忙吗?

谢谢

0 投票
2 回答
1549 浏览

objective-c - Objective-C中方法调配的正确方法

目前正在使用swizzlingObjective-C 中的方法进行试验,我有一个问题。我试图了解方法调酒的正确方法,在网上研究后,我偶然发现了这篇 NSHipster 帖子: http ://nshipster.com/method-swizzling/

在帖子中,作者有一些方法调配示例代码。我正在找人更好地向我解释作者在做什么。特别是我对didAddMethod逻辑感到困惑。为什么作者不只是直接swapping/exchanging方法实现?我对此的唯一理论是可能还有一些viewWillAppear:尚未添加的机会UIViewController's method dispatch_table。特别是如果该类别可能先加载到内存中UIViewController......这是原因吗?好像比较奇怪?只是寻找更多的洞察力/清晰度,谢谢:)

0 投票
1 回答
1657 浏览

objective-c - 如何正确使用 method_setImplementation() 进行调配?

我试图了解如何正确使用method_setImplementation(). 到目前为止,我在网上看到了两种主要流行的调酒方法,一种是使用method_setImplementation()while 其他 levarages method_exchangeImplementation

使用 swizzling 时,method_exchangeImplementation()您可能会遇到目标类未实现您尝试 swizzle 的方法的问题。为了避免祖先类实现该方法并错误地调配该方法时出现问题,您首先将一个实现添加到您的目标类,然后将 swizzledMethodIMP与您的祖先类方法交换以使事情井井有条。这一切对我来说都很有意义......

我的问题是我们如何处理与 swizzling 时相同的上述情况method_setImplementation?我们不需要处理这个案子吗(直觉上我觉得我们需要处理)?如果我们确实需要处理上述案例示例代码将对我有很大帮助,因为我不知道如何处理它。

0 投票
4 回答
825 浏览

c# - C# 方法的交换实现

是否可以在 C# 中交换方法的实现,例如 Objective-C 中的方法调配?

所以我可以在运行时用我自己的(或添加另一个)替换现有的实现(来自外部源,例如通过 dll)。

我已经搜索过这个,但没有发现任何有价值的东西。