问题标签 [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.
java - 'Swizzle'(也许是反射?) Android 上的 addView()
我知道您实际上不能在 Java 中进行 Swizzle。
我正在做一些研究,我认为“也许”你可以在 Java 中做反射来完成类似 Swizzle 的行为(你可以在 iOS 上做)。
罪魁祸首(也是我见过的最糟糕的设计决策之一)是addView()
所有 Android ViewGroup 对象上的函数。您必须明确检查父级是否为空(有时甚至需要强制转换父级以获得所需的行为!)。总的。
addView()
我想通过让该方法自动执行此检查来更改此行为(不创建一百万个子类),以便客户端代码可以忽略它。
这是我可以用反射做的事情吗(据我所知,它需要特殊的运行时调用,而不是实际更改根方法调用[所以可能不够好]),还是其他什么?还是我在叫错树?
ios - Objective-C 挂钩到 [AppDelegate openUrl]
环境
- 代码 6.4
- Objective-C
- iOS 应用程序
用例
- 该产品是集成在 3rd 方应用程序中的 SDK
- 无法使用 SDK 访问应用程序的源代码
- SDK 中的模块应检索用于启动应用程序的 URL(如果有)
手头的问题
考虑到上述用例,我如何检索用于启动应用程序的 URL(如果有),或者拦截由 Applications AppDelegate 实现的“openUrl”方法?
objective-c - 视频播放防止镜像解决方法
环境
- Xcode @ OS-X 优胜美地
- iOS App @ Obj-C
用例
- 在 iOS 和 OSX 之间设置了 Quicktime 镜像会话(如何在 iOS 8 和 Yosemite 之间设置镜像会话?)
- 第三方 SDK 与 iOS 应用程序集成
- SDK用于视频播放
- 当视频正在播放并设置了镜像会话(作为外部显示器)时,没有视频正在播放(只有音频)
- SDK没有任何API来控制外部视频播放/镜像在镜像时的开/关
我需要能够将视频镜像到我的 OSX 桌面,为此,我尝试通过以下方式从 3rd 方 SDK 隐藏镜像屏幕(但这没有帮助):
如何绕过视频播放镜像保护?我应该拦截任何较低级别的 API 吗?
ios - 调配一个没有实例的类
我需要在我试图调配的时候调配一个我没有参考的类。我正在使用“独立”调配方法,以便我可以从任何地方调配任何类,但它需要该类的实例来获取Class
引用。
所以示例代码有这一行:
但是,我需要执行以下操作:
或类似的东西。这在ObjectiveC中可能吗?
ios - Swizzling 不在框架中工作
我正在开发一个 iOS 框架,需要编写一个 swizzling 方法(用于 UIViewController 中的 viewDidAppear 方法)。
我的调酒方法在我的应用程序中完美运行。但是当我将我的头文件+实现文件剪切/粘贴到我的框架并启动应用程序时,它不起作用。我NSLog
在方法里面放了一个,load
但它不打印任何东西。
对于 swizzling,我遵循了本教程: http : //spin.atomicobject.com/2014/12/30/method-swizzling-objective-c/ 我在公共标头中添加了“UIViewController+Logging.h”。
知道为什么它不起作用吗?
ios - Objective-C 中的方法调配
我读了一篇关于“Objective-C 中的方法调配”的文章。在本文中,“Method Swizzing”的意思是交换两个方法的实现。示例如下图所示:
文章中有一句话是
看起来这个方法对自身进行了无意义的递归调用,但在我们混合后它实际上不会这样做。
但是我对这个说法不是很清楚,是不是意味着当我们编写如下代码时:
因为它的实现变成了“logged_viewDidAppear”,所以程序转到方法“logged_viewDidAppear”,在那个方法中我们可以看到,第一行是 [self logged_viewDidAppear:animated]; 出于同样的原因,该方法变为“viewDidAppear”。我的话对吗?
ios - 递归混合导致崩溃
我DAKeyboardControll
在我的应用程序上使用。它有一个名为 : 的方法,swizzled_addSubview
并像这样实现:
问题
最近在我与 AutoLayout 兼容的新版本中,我收到了这种方法的一些崩溃,以及它们的原因:
-[UIView(DAKeyboardControl) swizzled_addSubview:]
,
EXC_BAD_ACCESS KERN_PROTECTION_FAILURE at 0x0090dffc
我知道这个问题已经发生了很多电话,但为什么它不能正常工作?
此崩溃仅发生在 8 个用户身上,共 54 次,其中 50% 的用户拥有越狱设备,而另一个人拥有非越狱设备!
ios - 混合类方法和实例方法
我有一些奇怪的要求来使用实例方法混合类方法。
基本上,它们属于不同的 A 类和 B 类。A 有一个名为的静态函数
B 是具有函数的单例
而且它有一个功能
如何调出 aTest() 并指向 B.sharedInstance.bTest()?
我知道这是一个非常奇怪的要求..但我需要这个:)
ios - 无法识别的选择器发送到实例,但它应该
我因发送到实例 xxxx 的无法识别的选择器而崩溃
但在 LLDB 中,我可以确认该对象应该响应:
我的调用堆栈符号是:
编辑完整性
编辑2:一个更完整的例子:(为缺乏格式道歉,所以编辑横幅不起作用)
我正在UIViewController
通过@steipete 添加有关使用库的方面
https://github.com/steipete/Aspects
```
objective-c - Objective-C swizzled 方法不接收参数
我正在开发一个需要执行一些 swizzling 的应用程序。我正在将一种方法-(void)m1:(CMAcceleration)a;
与我提供的另一种方法混合在一起。
为了调配它,我使用:
然后我通常称它为事情是,当我期望像这里描述[ClassInstance m1:a];
的结构时,args 似乎充满了垃圾。在进行了一些类似 NSLog 的操作后,我需要将参数传递给原始实现。{name=type...}
在互联网上搜索,这似乎与模拟器问题有关,但我不确定,我无法访问设备来确认这一点。
我做错了什么还是有办法解决这个问题?