问题标签 [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.
objective-c - 静态库中的 Method swizzling 是否可能?
我正在尝试创建一个自动 UI 日志记录,我发现方法 swizzling 是解决该问题的一个非常好的解决方案。我试图调整实现的sendAction
方法UIApplication
。
我的问题是有时有效,有时无效。特别是如果我在静态库中编写代码,将其导出到 .a 文件并在我的项目中使用它。
如果方法调配是在静态库中实现的,它应该是一个问题吗?
即使在代码中,它有时也可以工作,有时什么也没有发生。它总是进入
load
方法,但并不总是进入heap_sendAction
方法。
这是代码:
- - - 更新 - - :
当我将函数放在 viewcontroller.m 类中时,会调用 heap_sendAction。我现在正在尝试不同的代码位置,看看它何时有效,何时无效。
c# - 使用反射交换方法实现(相同的签名)?
我必须在封闭源代码库中增加一些方法。我正在寻找一些非常简单的方法来交换两个静态方法的实现(具有完全相同的签名)。
我发现MethodRental.SwapMethodBody
了 ,我真的很喜欢,但没有对底层运行时的更深入了解,我几乎只是在猜测如何使用它。
有人可以在下面修复此代码吗?或者提出一种完全不同的方法?
ios - 如何使用 3D touch peek pop 正确调整 UIScrollView?
我正在尝试调整嵌入 3D Touch 的 peek and pop 预览的 UIScrollView。(我知道它是通过 Reveal 应用程序的 UIScrollView。)
我想知道用户何时在此滚动视图/3D 触摸预览上移动手指。
我尝试按如下方式调整它:
但是当我的手指在屏幕上滑动应该有数百个呼叫时,它只会呼叫一次或两次“是”。
我错了吗?
ios - 如何为 UICollectionView 调整 ScrollViewDidScroll 或其他滚动视图方法
我想为我的集合/表格视图调整一些滚动视图方法来跟踪一些事件。我收到错误,因为它无法在 collectionview 中找到 scrollViewDidScroll: Method。我尝试使用下面的代码
错误:类型 UICollectionView 没有成员“scrollViewDidScroll”
ios - 为模拟器构建时架构 x86_64 的未定义符号
我正在使用imp_implementationForwardingToSelector库将 IMP 转发到不同的选择器。它在真实设备上运行良好,但在我尝试为模拟器构建时出错
错误:架构 x86_64 的未定义符号
是否有任何我遗漏的设置或任何其他 lib 建议可以帮助我做同样的事情。
objective-c - 如何覆盖 Swift 类属性以进行测试
我有一个正在单元测试的 Swift 类。该类的主要目的是进行 HTTP 调用。我刚刚使用Mockingjay完成了对所有网络请求的模拟,但我想确保今后我不会忘记模拟未来的请求。当我进行最初的模拟时,我用一个不起作用的基本 URL 替换了我正在使用的基本 URL,但我想只在我的测试中保留它。被测类如下所示:
我尝试使用Objective-C类中的OCMock来替换baseURL
'上面-我宁愿不调酒,尤其是因为否则我不需要该类成为子类)。NSObject
baseURL
NSObject
这是我用来执行尝试混合的代码,但没有效果。对于以下两种尝试的解决方案,我像这样重写了我的测试类(因为看起来这两种方法都不适用于 Swift 属性或纯 Swift 类):
这是我的精彩尝试(在 Swift 中)。根据日志,我else
每次都点击该语句,以防它有助于弄清楚发生了什么。
这就是我尝试使用 OCMock(在 Objective-C 中)替换该方法的方式。该代码在我的单元测试配置期间被调用。
实现从 中返回无效值的目标的正确方法是baseURL
什么?
ios - Swizzling 函数 - 仅在运行时已知的函数
我想在objective-c中调配一个函数。问题是 - 我知道只在运行时需要调整的函数。现在代码中的不同方法将具有不同的返回类型、输入参数等。
我应该如何编写一个(通用)代码,如果给定它所属的函数和类的名称,我可以创建一个块,然后使用 imp_implementationWithBlock 创建 IMP,然后使用这个新创建的 IMP 调整原始方法。
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 UIViewController
s 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:
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 UIViewController
s instantly conform to NakedNavigationBar
rather than only the ones I choose.
ios - method_setImplementation() 是原子的吗?
如果method_setImplementation()
正在替换dealloc
NSObject 类的方法,同时在另一个线程中,NSObject 实例正在调用或即将调用dealloc
方法,会发生什么情况。
实例会得到正确的dealloc
方法地址吗?使用方法调配时随机崩溃。调用dealloc方法时总是崩溃。
这是我的崩溃信息:
和崩溃的线程:
我有一个空指针。
有没有替换 dealloc 方法的安全方法?
ios - NSMutableDictionary 的 Swizzled 方法没有被调用
我正在尝试调配 NSMutableDictionary。我在这里做错了什么?我正在尝试为 NSMutableDictionary 覆盖 setObject:forKey:。
@结尾