今天我正在开发一个项目,在该项目中我想为所有实例“别名”一个替代方法NSArray
,并且不认为对某些人来说太困难很好的老式方法。 http://www.google.com/search?q=method%20Swizzling
我爆发了JRSwizzle https://github.com/rentzsch/jrswizzle.git and…
[NSArray jr_swizzleMethod:@selector(objectAtIndex:) withMethod:@selector(objectAtIndex_accordingToMe:) error:nil];
需要明确的是,我将其与适当的类别配对NSArray
,一个名为的实例方法objectAtIndex_accordingToMe:
.
然而,我刚刚得到那个相同的旧对象,相同的旧索引。叹。最终,我发现尽管没有抛出任何错误 - 我不会实现这些结果由于这个事实NSArray是一个类簇 https://stackoverflow.com/a/7218794/547214
我想我的问题更多的是不愿意接受“这”实际上是试图超越的道路的尽头NSArray
方法。我的意思是,来吧,这是NSArray
..人们一定想搞砸它,不是吗?一会认为苹果的基础课程将成为各地调酒师的主要目标!
那么,有没有办法改变别名,猴子补丁 http://en.wikipedia.org/wiki/Monkey_patch、覆盖或以其他方式使用… NSArray 等(无需子类化)?
这不仅仅是因为它是一个类集群。NSArray
免费桥接至CFArray
,并且您无法混合 Core Foundation。所以这通常不太可能起作用。
但你想解决什么问题?如果要添加新方法,请使用类别。他们在班级集群上工作得很好。修改 NSArray 上某些内置函数的行为似乎会导致灾难(虽然作为练习可能很有趣)。
去之前too到目前为止,你可能至少想看看CFArray.c http://opensource.apple.com/source/CF/CF-635.21/CFArray.c并了解一些底层的东西是如何实现的。
编辑:虽然我永远不会在生产代码中执行此操作,但您可以通过使用 ISA-swizzling 劫持单个数组实例来获得一些您想要的东西。看ISA维兹尔 https://github.com/rnapier/ios5ptl/tree/master/ch20/ISASwizzle一些示例代码。代码解释在第20章iOS:PTL http://www.wiley.com/WileyCDA/WileyTitle/productCd-1118818342.html。搜索“isa swizzle”,您应该可以在网上找到更多信息。这就是 KVO 的实现方式。但对于 NSArray...哇,那一定很脆弱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)