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

objective-c - 我的 isa-swizzling 打破了 KVO

我正在尝试实现 isa swizzling,因为我需要在某些对象的 dealloc 方法中发生一些操作。我正在覆盖 - (Class)class; 返回原始类的方法(如 KVO 所做的那样)。一切正常,直到我尝试将观察者添加到 swizzled 对象。它只是崩溃。

  1. 0x00000000 在 0x00000000 ()
  2. _NSKeyValueRetainedObservationInfoForObject()中的0x0091d22a
  3. 0x0092ec88 在 -[NSObject(NSKeyValueObserverRegistration) _addObserver:forProperty:options:context:] ()
  4. 0x0092d6fd 在 -[NSObject(NSKeyValueObserverRegistration) addObserver:forKeyPath:options:context:] ()

这是混合的实现

MDDummy 它只是一个以 convinietn 方式保存的类方法(这与添加原始函数没有区别)。

编辑:

下面是 class_addMethodFromClass 函数的实现:

0 投票
2 回答
556 浏览

isa-swizzling - 我在 python 中添加两个矩阵时遇到问题

我想在 python 3 中添加两个矩阵,但是当我添加input到程序时问题就来了

这是我的代码

如果输入是

输入矩阵:[[5,6], [1,2], [2,4]]

输入另一个矩阵:[[2,3], [-6,0], [-2, 4]]

输出为 [['[['], ['[['], ['52'], [',,'], ['63'], [']]'], [',, '], [''], ['[['], ['1-'], [',6'], ['2,'], [']0'], [',]'], [','], ['['], ['2['], [',-'], ['42'], ['],'], ['] ']]

但是如果我input从程序中取出并使它

然后输出[[7, 9], [-5, 2], [0, 8]]是正确的。

有没有一种方法可以使我的程序正常工作,以便当一个人输入两个矩阵时,它们相加?我是 python 新手,所以任何帮助将不胜感激:)

0 投票
1 回答
126 浏览

objective-c - Objective-c: Swizzling 类导致调试中的属性丢失

我创建了一个运行时类,然后将一个实例调配为该新类的一个实例。

这工作正常。swizzling 后,我可以调用 MyClass 上定义的方法和设置属性。

唯一的问题是调试器不再显示对象的属性。

Apple 似乎已经通过他们的 KVO 运行时类克服了这个问题。

我尝试使用 class_addProperty 在新类上添加属性,但这失败了,因为它们已经定义了。

有什么我想念的吗?

0 投票
2 回答
91 浏览

vb.net - 对象是作为超类创建的,想把它变成子类

我得到了一个库,其中包含通用数据对象、项目、表、行和字段。在我的程序中,我有一个名为 Building 的项目,它的表 1 包含“单位”,表 1 的字段 1 是“单位名称”。所以我所做的是...

这看起来还不错吧?但是我没有加载单元对象,我有行。所以那我还得再上一堂课……

当然,我必须创建建筑物列表,这样我才能访问单元列表,以及其他数十个列表和访问器,变成数千行代码,其唯一目的是制作一组指向的对象其他。

它有效,而且我知道运输是一项功能。但我真正想做的是制作一个看起来像......

然后我会将 List(Of Row) “反向转换”为 List(Of Unit)。这不仅会消除大量代码,还会消除悬空指针,大量减少内存,并消除可能需要一些时间的设置集。理论上可能,除了代码没有区别,但我没有看到在 VB.Net 中做到这一点的方法。

在 Obj-C 中,这被称为 swizzling(和/或扩展),我认为 Java 也有类似的概念。我怀疑 ADO.Net 必须做这样的事情?我是否缺少某种“将其包装在内”的功能?

0 投票
1 回答
228 浏览

objective-c - ISA swizzling 并调用“super”

假设以下类层次结构。类A是公开声明的:

_B是 的私有子类A

假设类的对象A只能使用工厂方法createInstance创建,该方法创建并返回_B.

我想A在每个实例的基础上增强实例的功能。所以我决定做一些 ISA swizzling 来实现:

我使用以下方法对一个NSObject类别进行 ISA swizzling(此处显示的幼稚实现):

一切似乎都有效,但我注意到它[super a];的行为不像预期的那样,-[A a]如果运行时的超类实际上是_B.

用以下代码替换对的调用super是可行的,但很丑陋,并且需要开发人员的知识和工作:

调用时编译器会发出什么super以及以任何方式更改此发出的代码?

0 投票
2 回答
403 浏览

ios - 递归混合导致崩溃

DAKeyboardControll在我的应用程序上使用。它有一个名为 : 的方法,swizzled_addSubview并像这样实现:

问题

最近在我与 AutoLayout 兼容的新版本中,我收到了这种方法的一些崩溃,以及它们的原因: -[UIView(DAKeyboardControl) swizzled_addSubview:]EXC_BAD_ACCESS KERN_PROTECTION_FAILURE at 0x0090dffc

我知道这个问题已经发生了很多电话,但为什么它不能正常工作?

此崩溃仅发生在 8 个用户身上,共 54 次,其中 50% 的用户拥有越狱设备,而另一个人拥有非越狱设备!

0 投票
1 回答
3403 浏览

objective-c - method swizzling 和 isa swizzling 是一回事吗?

method swizzling 和 isa swizzling 是一回事吗?如果不是,那么什么是 swizzling?

0 投票
1 回答
2154 浏览

ios - Swift - 方法调配

这是用 Objective-C 编写的方法调配代码。我很难在 Swift 中转换它。

Swiftify没有正确转换上述代码。

我尝试这样做,但我不确定如何在 Swift swizzling 方法中传递参数并使用上述参数。这是我在 Swift 中转换上述内容的失败尝试(代码甚至无法编译):