问题标签 [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.
ios - 带有动态变量的 swift 类的计时问题,它继承自目标 c,其中 get/set 方法被替换
我有一个非常具体的问题,如果我有一个继承自objective-c 类的swift 类,并且它具有动态属性。
现在,在 +initialize 中,我将 getter 和 setter 注入到 swift(:NSObject) 类中,这些都没有问题,除了在从 init 重载设置值时出现小问题。
所以,我的 swift 类看起来像这样:
而基于swift的objective-c类如下:
长话短说,在对 的调用中init(initialValue: String)
,getter 和 setter 不会被触发,但在对 init 的调用完成后它们会立即工作。
尽管调用初始化成功完成并且方法被替换。
但在init
函数之外,get/set 的行为与预期相同。
这里是它被调用的地方。
Apo test.testStringProperty
创建对象后,会输出 nil。但是随后的分配会触发所有正确的方法。
只有在 init 中分配时才会失败。在其他任何地方,它都像魅力一样工作。
如果可能的话,我想让它在初始化程序中工作,我不确定是否有其他方法可以解决它。
这是复制问题的示例应用程序的链接:
https://www.dropbox.com/s/5jymj581yps799d/swiftTest.zip?dl=0
objective-c - 如何使用 Swift 向 UIApplication 添加 swizzling 方法?
我在下面有一个代码,试图将 swizzling 方法用于 UIApplication 方法。但是这些方法没有被调用。同时,我正在尝试将此代码添加到框架或私有 pod 中。
ios - Method Swizzling - 通过自定义记录器路由每个方法调用,而无需更改底层方法
我正在尝试编写一个框架,该框架将在该类的对象上调用该方法时打印某些日志语句,包括类名和方法名。我想这样做而不需要修改实际方法。例如,假设有一个方法-(void)sendButtonClicked
,当控制到达该方法时,框架拦截并在控制台上打印类和方法名称。
这有点像Method Swizzling。
有什么线索吗?
ios - 有没有办法列出 iOS 应用程序中的所有 swizzled 方法?
我本质上是在寻找一种方法来检测第三方库何时/什么发生混乱。我最近遇到了一个广告库使用 AFNetworking 的古怪分支的情况。AFNetworking swizzles NSURLSessionTask,这两个 swizzles 在某些情况下并没有很好地发挥作用。我真的很想能够检测和健全检查这种事情,理想情况下,甚至可以在应用程序中保留每个 swizzled 方法的版本转储,这样我们就可以了解谁在修补什么以及风险是什么。谷歌和堆栈溢出搜索除了一堆关于如何调配的教程之外什么都没有出现。有人遇到这个问题或有解决方案吗?看起来我可以使用 objc/runtime.h 编写一些东西,但我无法想象我是第一个需要这个的人。
ios - 快速调整属性的方法
虽然可以替换setMyProperty:
obj-c 中的方法,但我想知道如何快速做到这一点?
例如我想替换UIScrollView::setContentOffset:
:
...但执行后originalSelector
包含setContentOffset:animaed
. 那么,如何将属性的 setter 方法传递给selector
?
objective-c - Objective-C 中方法调配的缺点是什么?
Objective-C 中方法调配的缺点是什么?
objective-c - method swizzling 和 isa swizzling 是一回事吗?
method swizzling 和 isa swizzling 是一回事吗?如果不是,那么什么是 swizzling?
objective-c - 从 swizzled 函数调用原始函数
我在搞乱方法调配,想在执行method_exchangeImplementations
. 我为此设置了两个项目。
第一个项目是应用程序的主项目。该项目包括应用程序的所有逻辑。请注意,originalMethodName
当视图加载时调用。
第二个项目仅包含 swizzling 的代码。我有一个方法swizzle_originalMethodName
,其中包含我想注入到主应用程序中的代码,originalMethodName
并调用该函数。
调酒器工作得很好(如下面的输出所示),但现在我希望能够originalMethodName
从swizzle_originalMethodName
我曾尝试使用NSInvocation
但没有任何运气。任何想法我做错了什么?
ios - iOS Method Method Swizzling - 2 SDK 试图在 1 个应用程序中 Swizzle “ViewDidAppear”方法,然后会发生什么?
如果我在我的 iOS 应用程序中添加 2 个 SDK,其中内部为相同的方法“ViewDidAppear”进行方法调配,那么在运行时会发生什么(好 + 坏)。
ios - 在objective-c中调配的方法在任何地方都有效
我为方法 swizzled 创建了一个类别UITextField
,它的名字是这样的UITextField+MaxLength
,我实现了+load
做 swizzled 的方法,但是我没有在前缀头或其他文件中导入它,只是在SomeViewController
.
我认为 swizzled 应该只适用于SomeViewController
,但为什么 swizzled 方法在每个UITextField
甚至 a中都被调用UISearchBar
?+load
当我运行应用程序时调用该方法?
编辑
我想我需要指出为什么我使用 swizzled,因为我想使用 KVO 来观察文本的变化,所以我 swizzledsetText
并关联了一个NSNumber
名为的属性displayLength
,所以,如果我不使用 KVO,我可以删除 swizzled 的部分这个类别,我可以将子字符串剪切到特定的最大长度。