- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天我正在做一个项目,我想为 NSArray
的所有实例“别名”一个替代方法,并且认为使用一些 good old-fashioned method swizzling. 不会太困难。
我爆发了JRSwizzle和……
[NSArray jr_swizzleMethod:@selector(objectAtIndex:) withMethod:@selector(objectAtIndex_accordingToMe:) error:nil];
为了清楚起见,我将它与 NSArray
上的适当类别配对,这是一个名为 objectAtIndex_accordingToMe:
的实例方法。
但是,我只是在相同的旧索引处得到了那个相同的旧对象。叹。最终,我发现尽管没有抛出任何错误 - 我不会获得这些结果 due to the fact that NSArray
is a class cluster
我想我的问题更多的是不愿意接受“this”真的是试图覆盖 NSArray
方法的尽头。我的意思是,来吧,这是 NSArray
.. 人们一定想弄乱它,不是吗?有人会认为Apple 的基础类(class)将成为无处不在的 swizzlers 的主要目标!
所以,有没有办法改变,别名,monkey-patch 、覆盖或以其他方式使用……NSArray 等(没有子类化)?
最佳答案
不光是类(class)集群。 NSArray
是免费桥接到 CFArray
的,您不能调配 Core Foundation。所以这不太可能在一般情况下起作用。
但是你想解决什么问题?如果要添加新方法,请使用类别。他们在类(class)集群上工作得很好。修改 NSArray 上某些内置函数的行为似乎是灾难的根源(作为练习可能很有趣)。
在深入之前,您可能至少想看一下 CFArray.c并了解一些底层内容是如何实现的。
编辑:虽然我永远不会在生产代码中这样做,但您可以通过使用 ISA 调配劫持单个数组实例来获得您想要的一些东西。参见 ISASwizzle对于一些示例代码。代码解释在第20章iOS:PTL .搜索“isa swizzle”,您应该可以在网上找到更多信息。这就是 KVO 的实现方式。但是对于 NSArray...哇,那一定很脆弱。
关于objective-c - 有什么方法可以猴子修补或调配 NSArray(或其他类集群)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751473/
我调配 NSMutableArray addObject 失败了。代码如下: Method ori_Mehtod = class_getInstanceMethod([self class], @se
我的问题不是关于如何调配,而是这个特定代码片段中发生了什么: private let swizzling: (UIViewController.Type) -> () = { viewControll
我正在 MKMapView 和 UIScrollView 上调配 initWithFrame: 和 dealloc,以添加和删除通知监听器以监视与外部设备的连接,以便我可以为这些 View 连接其他手
我正在使用 AmazonElasticMapReduceAsyncClientBuilder 为实例组设置自动扩展策略。 当我执行 aws emr describe-cluster --cluster
我是一名优秀的程序员,十分优秀!