问题标签 [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.
objective-c - 我的 isa-swizzling 打破了 KVO
我正在尝试实现 isa swizzling,因为我需要在某些对象的 dealloc 方法中发生一些操作。我正在覆盖 - (Class)class; 返回原始类的方法(如 KVO 所做的那样)。一切正常,直到我尝试将观察者添加到 swizzled 对象。它只是崩溃。
- 0x00000000 在 0x00000000 ()
- _NSKeyValueRetainedObservationInfoForObject()中的0x0091d22a
- 0x0092ec88 在 -[NSObject(NSKeyValueObserverRegistration) _addObserver:forProperty:options:context:] ()
- 0x0092d6fd 在 -[NSObject(NSKeyValueObserverRegistration) addObserver:forKeyPath:options:context:] ()
这是混合的实现
MDDummy 它只是一个以 convinietn 方式保存的类方法(这与添加原始函数没有区别)。
编辑:
下面是 class_addMethodFromClass 函数的实现:
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 新手,所以任何帮助将不胜感激:)
objective-c - Objective-c: Swizzling 类导致调试中的属性丢失
我创建了一个运行时类,然后将一个实例调配为该新类的一个实例。
这工作正常。swizzling 后,我可以调用 MyClass 上定义的方法和设置属性。
唯一的问题是调试器不再显示对象的属性。
Apple 似乎已经通过他们的 KVO 运行时类克服了这个问题。
我尝试使用 class_addProperty 在新类上添加属性,但这失败了,因为它们已经定义了。
有什么我想念的吗?
vb.net - 对象是作为超类创建的,想把它变成子类
我得到了一个库,其中包含通用数据对象、项目、表、行和字段。在我的程序中,我有一个名为 Building 的项目,它的表 1 包含“单位”,表 1 的字段 1 是“单位名称”。所以我所做的是...
这看起来还不错吧?但是我没有加载单元对象,我有行。所以那我还得再上一堂课……
当然,我必须创建建筑物列表,这样我才能访问单元列表,以及其他数十个列表和访问器,变成数千行代码,其唯一目的是制作一组指向的对象其他。
它有效,而且我知道运输是一项功能。但我真正想做的是制作一个看起来像......
然后我会将 List(Of Row) “反向转换”为 List(Of Unit)。这不仅会消除大量代码,还会消除悬空指针,大量减少内存,并消除可能需要一些时间的设置集。理论上可能,除了代码没有区别,但我没有看到在 VB.Net 中做到这一点的方法。
在 Obj-C 中,这被称为 swizzling(和/或扩展),我认为 Java 也有类似的概念。我怀疑 ADO.Net 必须做这样的事情?我是否缺少某种“将其包装在内”的功能?
objective-c - ISA swizzling 并调用“super”
假设以下类层次结构。类A
是公开声明的:
类_B
是 的私有子类A
:
假设类的对象A
只能使用工厂方法createInstance
创建,该方法创建并返回_B
.
我想A
在每个实例的基础上增强实例的功能。所以我决定做一些 ISA swizzling 来实现:
我使用以下方法对一个NSObject
类别进行 ISA swizzling(此处显示的幼稚实现):
一切似乎都有效,但我注意到它[super a];
的行为不像预期的那样,-[A a]
如果运行时的超类实际上是_B
.
用以下代码替换对的调用super
是可行的,但很丑陋,并且需要开发人员的知识和工作:
调用时编译器会发出什么super
以及以任何方式更改此发出的代码?
ios - 递归混合导致崩溃
我DAKeyboardControll
在我的应用程序上使用。它有一个名为 : 的方法,swizzled_addSubview
并像这样实现:
问题
最近在我与 AutoLayout 兼容的新版本中,我收到了这种方法的一些崩溃,以及它们的原因:
-[UIView(DAKeyboardControl) swizzled_addSubview:]
,
EXC_BAD_ACCESS KERN_PROTECTION_FAILURE at 0x0090dffc
我知道这个问题已经发生了很多电话,但为什么它不能正常工作?
此崩溃仅发生在 8 个用户身上,共 54 次,其中 50% 的用户拥有越狱设备,而另一个人拥有非越狱设备!
objective-c - method swizzling 和 isa swizzling 是一回事吗?
method swizzling 和 isa swizzling 是一回事吗?如果不是,那么什么是 swizzling?
ios - Swift - 方法调配
这是用 Objective-C 编写的方法调配代码。我很难在 Swift 中转换它。
Swiftify没有正确转换上述代码。
我尝试这样做,但我不确定如何在 Swift swizzling 方法中传递参数并使用上述参数。这是我在 Swift 中转换上述内容的失败尝试(代码甚至无法编译):