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

objective-c - 静态库中的 Method swizzling 是否可能?

我正在尝试创建一个自动 UI 日志记录,我发现方法 swizzling 是解决该问题的一个非常好的解决方案。我试图调整实现的sendAction方法UIApplication

我的问题是有时有效,有时无效。特别是如果我在静态库中编写代码,将其导出到 .a 文件并在我的项目中使用它。

  1. 如果方法调配是在静态库中实现的,它应该是一个问题吗?

  2. 即使在代码中,它有时也可以工作,有时什么也没有发生。它总是进入load方法,但并不总是进入heap_sendAction方法。

这是代码:

- - - 更新 - - :

当我将函数放在 viewcontroller.m 类中时,会调用 heap_sendAction。我现在正在尝试不同的代码位置,看看它何时有效,何时无效。

0 投票
0 回答
985 浏览

c# - 使用反射交换方法实现(相同的签名)?

我必须在封闭源代码库中增加一些方法。我正在寻找一些非常简单的方法来交换两个静态方法的实现(具有完全相同的签名)。

我发现MethodRental.SwapMethodBody了 ,我真的很喜欢,但没有对底层运行时的更深入了解,我几乎只是在猜测如何使用它。

有人可以在下面修复此代码吗?或者提出一种完全不同的方法?

0 投票
1 回答
291 浏览

ios - 如何使用 3D touch peek pop 正确调整 UIScrollView?

我正在尝试调整嵌入 3D Touch 的 peek and pop 预览的 UIScrollView。(我知道它是通过 Reveal 应用程序的 UIScrollView。)

我想知道用户何时在此滚动视图/3D 触摸预览上移动手指。

我尝试按如下方式调整它:

但是当我的手指在屏幕上滑动应该有数百个呼叫时,它只会呼叫一次或两次“是”。

我错了吗?

0 投票
1 回答
538 浏览

ios - 如何为 UICollectionView 调整 ScrollViewDidScroll 或其他滚动视图方法

我想为我的集合/表格视图调整一些滚动视图方法来跟踪一些事件。我收到错误,因为它无法在 collectionview 中找到 scrollViewDidScroll: Method。我尝试使用下面的代码

错误:类型 UICollectionView 没有成员“scrollViewDidScroll”

0 投票
1 回答
176 浏览

ios - 为模拟器构建时架构 x86_64 的未定义符号

我正在使用imp_implementationForwardingToSelector库将 IMP 转发到不同的选择器。它在真实设备上运行良好,但在我尝试为模拟器构建时出错

错误:架构 x86_64 的未定义符号

是否有任何我遗漏的设置或任何其他 lib 建议可以帮助我做同样的事情。

0 投票
1 回答
1690 浏览

objective-c - 如何覆盖 Swift 类属性以进行测试

我有一个正在单元测试的 Swift 类。该类的主要目的是进行 HTTP 调用。我刚刚使用Mockingjay完成了对所有网络请求的模拟,但我想确保今后我不会忘记模拟未来的请求。当我进行最初的模拟时,我用一个不起作用的基本 URL 替换了我正在使用的基本 URL,但我想只在我的测试中保留它。被测类如下所示:

我尝试使用Objective-C类OCMock来替换baseURL'上面-我宁愿不调酒,尤其是因为否则我不需要该类成为子类)。NSObjectbaseURLNSObject

这是我用来执行尝试混合的代码,但没有效果。对于以下两种尝试的解决方案,我像这样重写了我的测试类(因​​为看起来这两种方法都不适用于 Swift 属性或纯 Swift 类):

这是我的精彩尝试(在 Swift 中)。根据日志,我else每次都点击该语句,以防它有助于弄清楚发生了什么。

这就是我尝试使用 OCMock(在 Objective-C 中)替换该方法的方式。该代码在我的单元测试配置期间被调用。

实现从 中返回无效值的目标的正确方法是baseURL什么?

0 投票
1 回答
536 浏览

ios - Swizzling 函数 - 仅在运行时已知的函数

我想在objective-c中调配一个函数。问题是 - 我知道只在运行时需要调整的函数。现在代码中的不同方法将具有不同的返回类型、输入参数等。

我应该如何编写一个(通用)代码,如果给定它所属的函数和类的名称,我可以创建一个块,然后使用 imp_implementationWithBlock 创建 IMP,然后使用这个新创建的 IMP 调整原始方法。

0 投票
1 回答
984 浏览

ios - Swift - extending a class only when it conforms to a protocol to use method swizzling

I have a protocol called NakedNavigationBar.

I also have an extension that extends all UIViewControllers that conform to NakedNavigationBar.

The problem is that in the extension I want to add default behaviour so that when the UIViewController initialises, we use method swizzling on the UIViewController.

Here is my protocol and extension:

The errors I get when building are: errors

Essentially telling me that I cannot extend the protocol because it doesn’t have the UIViewController methods. But as I understand it, the where Self: UIViewController should make it so that this only works on a UIViewController, extending the view controller only when it conforms to NakedNavigationBar.

Originally the extension was extension UIViewController: NakedNavigationBar but this makes all of my UIViewControllers instantly conform to NakedNavigationBar rather than only the ones I choose.

0 投票
2 回答
346 浏览

ios - method_setImplementation() 是原子的吗?

如果method_setImplementation()正在替换deallocNSObject 类的方法,同时在另一个线程中,NSObject 实例正在调用或即将调用dealloc方法,会发生什么情况。

实例会得到正确的dealloc方法地址吗?使用方法调配时随机崩溃。调用dealloc方法时总是崩溃。

这是我的崩溃信息:

和崩溃的线程:

我有一个空指针。

有没有替换 dealloc 方法的安全方法?

0 投票
3 回答
243 浏览

ios - NSMutableDictionary 的 Swizzled 方法没有被调用

我正在尝试调配 NSMutableDictionary。我在这里做错了什么?我正在尝试为 NSMutableDictionary 覆盖 setObject:forKey:。

@结尾