gpt4 book ai didi

objective-c - 有什么方法可以猴子修补或调配 NSArray(或其他类集群)?

转载 作者:太空狗 更新时间:2023-10-30 04:01:12 25 4
gpt4 key购买 nike

今天我正在做一个项目,我想为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com