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

ios - 是否可以在 swift 项目中禁用方法调配?

我有一个带有 3rd 方框架的非常大的项目,并且想禁用方法调配以确保 3rd 方框架不会弄乱默认的预期行为。可能吗?项目设置中有一些标志吗?

0 投票
0 回答
1205 浏览

android - 通过反射/类加载器替换Android中的方法实现

我目前正在研究移动应用程序的运行时操作技术。在 iOS 平台上,我可以通过调用诸如 class_replaceMethod(...) 之类的 Objective-C 运行时库函数轻松地进行方法调配。在Android上是否可以使用等效方式?

如果我使用 JDB,我可以更改局部变量并评估表达式。通过后者,我假设可以更改方法的整个实现主体。您将如何做到这一点,例如使用反射?需要哪些步骤?

提前致谢!

0 投票
1 回答
127 浏览

ios - 在混合方法中识别方法名称

我有许多类,并且在类内部定义了许多方法。当每个方法被调用时,我需要执行一组特定的操作。我可以在每个方法中编写一组操作。但我不想弄乱代码。所以我创建了一个辅助类,在里面我将传递一组类和选择器。

我已经遍历了数组,并使用了 swizzling 技术,并将每个方法的实现与帮助程序类中定义的自定义方法进行了交换。因此,每当上述任何类中的任何方法被触发时,我都会调用我的自定义 swizzling 方法。

但我的问题是我无法区分哪个是触发的原始​​方法。基于此,一些参数将在我上面提到的自定义操作集中发生变化。

我目前的实现如下:

而当前的 swizzled 方法是:

因此,每当调用选择器数组中列出的任何方法时,该方法trackMethodInvocation()都会触发,但我需要知道trackMethodInvocation().

有什么方法可以知道哪个是 swizzled 方法中的原始方法。

0 投票
1 回答
368 浏览

swift - NSLocale.currentLocale 从 swift 2.3 到 swift 3 的端口方法 swizzle

Swift 3 在 NSLocale(现在的 Locale)类中引入了很多变化。我需要执行方法 swizzleNSLocale.currentLocale()来执行一些助手的单元测试。使用 Swift 2.3,我可以使用这种方法:

现在的问题是 Swift 3currentLocale不再是,它已经被 property 取代了current

Swift 3 怎么能达到同样的效果呢?

0 投票
1 回答
391 浏览

ios - 方法调配在 iOS 10.1 上不起作用

我想调配@property string方法UIPasteboard

当我调用[[UIPasteboard generalPasteboard] setString:@"test"];它时,输入我的调酒方法。它适用于 iOS 7、iOS 8 和 iOS 9。但是,它在 iOS 10 上失败。

组装不同的测试方法:</p>

在 iOS 9 上:

在 iOS 10 上:

0 投票
1 回答
911 浏览

ios - UIViewController 方法 swizzling 不起作用

我在 UIViewController 上使用一个类别来调整 viewWillAppear: 跨多个 ViewControllers 的方法。

当我从 Storyboard 加载初始 VC 时,从不调用 swizzled 方法。只有在 VC 中的 viewWillAppear 方法被注释掉时才会调用它。但是,当我删除类别并将代码移动到单个 VC 中时,这两种方法都会被调用。

如果要进行调配,可以在 VC 中实现 viewWillAppear 吗?如果没有,如果我需要在 VC 的 viewWillAppear 中编写一些代码,我该如何处理?

0 投票
1 回答
1253 浏览

ios - 防止方法混杂 Objective-c

我正在尝试搜索以防止在我当前的库中使用 Method Swizzle,但我发现的每个文档或博客文章或多或少都是关于如何实现 Swizzling。关于Method swizzling,我有几个问题我无法找到。

  • 如何在运行时检测 Method Swizzling?
  • 如果有一个 Method Swizzle 如何防止它?

我知道方法混用的危险,并且已经浏览了这里的相关帖子,但找不到相关信息来防止它。

如果有任何关于上述主题的文档或博客文章,我将非常感谢您的帮助。

0 投票
1 回答
322 浏览

ios - 在这两种机制之间混合时有什么区别

这两种调酒方式略有不同。我只想澄清他们之间是否存在根本不同或错误

假设我们正在viewDidLoad调动UIView

第一种方式(使用class_addMethod):

第二种方式(不使用class_addMethod):

0 投票
0 回答
137 浏览

objective-c - Objective-c 运行时列出一个类的所有方法,包括 swizzled 的方法

我主要对混合的方法感兴趣。

我试过这个有没有办法列出 iOS 应用程序中的所有 swizzled 方法? 但依赖不起作用。

是否有一种蛮力方法来枚举所有要比较的类和方法?

0 投票
2 回答
822 浏览

swift - 如何在 swift 3 中调整 URLSession 类方法 dataTask

我想调整 URLSession 类方法 dataTask 但无法完成。

我在objective-c中尝试了这种混合,并且它工作正常,现在我想在swift 3中实现它但没有得到任何东西。

我参考 了这个链接,但它在 swift 3 中不起作用。

请帮我。