问题标签 [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.
swift - Swizzle `init` 并调用内部的实际实现,Swift 4
我想调酒init(frame:)
,NSView
但在里面打电话是真实的init(frame:)
。这可能吗?我知道,我可以通过子类化和覆盖来实现相同的目标,但是在所有地方都需要改变它。我不知道如何正确实现 swizzled 方法来避免递归。我的代码:
我也尝试了几乎相同的方法,但使用convenience init
并得到了递归。任何帮助,将不胜感激。
ios - Swizzling UIResponder Touch 事件不调用原始方法实现
我正在尝试UITouch
通过创建UIResponder
扩展来调整生命周期事件。以下是描述touchesBegan
.
然后我像这样在我的应用程序中调用它-
我看到的是-“调用了 swizztouchesBegan 事件!” 被打印出来,我开始创建触摸元数据的字典。但是,它看起来并没有调用原始实现,例如,假设在我的代码中的某个地方,在表格视图控制器中,我编写了以下内容 -
这个被覆盖的 touchesBegan 没有被调用 - 可能是什么问题?我已经通过再次调用 swizzled 来从 swizzled 内部调用原始实现(从而确保调用原始实现。)
PS/附录:我已经能够通过覆盖UIView
扩展中的触摸方法来使其工作,如下所示。有人可以指出使用这种方法比使用这种方法有什么缺点吗?
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
ios - ObjC SDK 中的方法调配
我正在编写一种新HTTP Library
的 SDK。为了实现横切关注点,我们计划编写类似于 c# 的中间件支持,即处理重试、重定向、日志记录等的机制。
使用方法调配来调配一些NSURLSession
方法以实现上述目标是一个好主意吗?
ios - 为什么这个 UIViewController 方法 swizzling 不起作用?
我正在尝试NSHipster Fake Book的代码示例来调整 UIViewController的viewWillAppear:
方法。但似乎它没有按预期工作,因为该xxx_viewWillAppear:
方法从未被调用过。我只是不知道为什么。请帮助我,谢谢。
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
任何人都可以就如何在设备上运行它提供建议吗?谢谢。
ios - 多方法混用时如何找到方法的原始实现
例如,如果原产地 IMP 是UIViewController - ViewDidLoad
在我的项目中,可能会喜欢main Project
+ many other SDK(frameworks)
,如果其他团队成员使用相同的方法,比如UIViewController - ViewDidLoad
,我如何确定或如何找出ViewDidLoad
swilling 的来源 IMP?导致其他队员也需要同样的方法?
ios - ios swizzle 更好理解
我有一个带有此代码的 UIViewController:
然后我有一个带有 UIViewController 类别的框架,它以这种方式运行:
输出是 SWIZZLED,然后是 CLASIC。
现在我的问题是:如果在我的视图控制器中我评论了 [super viewDidAppear:animated]; 然后不再调用 swizzled 方法;这是为什么?我理解了大部分方面,但似乎这一方面不知何故滑倒了。
ios - 在 Objective-C 中替换(调配)整个类(使用所有实例和静态方法)
我是方法调配的新手,现在我想在 iOS 上做更多的事情:Objective-C 中是否有一种简单/优雅的方法可以将现有类 (ClassA) 的所有调用重定向到另一个类(ClassB ,只要它具有完全相同的方法)。我知道可以使用单一方法(方法调配)来做到这一点,但是整个类呢?
- 获取所有类的方法列表并一一调整它们?
- 只调动类的 init 方法?
- 还有其他方法吗?
我要替换的类有很多静态方法,我不想接触原始代码。