“查找”已知类的对象实例?

时间:2010-05-29 01:16:28

标签: objective-c cocoa

我在这里的第一篇文章(在任何地方!),重新。 Cocoa / Obj-C(我也不高兴,请耐心等待!)。我希望我没有错过答案,我确实试着找到它。

我是一个老派的程序性狗(自80年代中期以来没有做任何编程,所以我可能甚至不能学习新的技巧),但是OOP让我头晕目眩!我的问题是:

  

有什么办法吗?   “发现/发现/识别”一个实例   给定的已知类的对象   那个其他未知的过程   实例化了吗?

例如。完成这种情况的一些事情:

(id) anObj = [someTarget getMostRecentInstanceOf:[aKnownClass class]];

就此而言,“getAnyInstance”或“getAllInstances”也可能起到作用。

背景:我正在尝试为商业应用程序编写插件,因此应用程序在幕后完成了大量繁重工作。

我有SDK&头文件,我知道对象是什么类,我需要调用什么方法(它​​只有实例方法),我只是无法识别目标对象。

我花了不少时间和数天来浏览网上的Apples文档,教程和大量示例/示例代码(包括Stack Overflow),然后空白。似乎一切都需要一个已知的目标对象才能工作,而我只是没有。

由于我可能没有根据需要明确表达我的问题,因此我建立了一个网页,其中包含图表和图表。工作样本页面说明:

http://www.nulltime.com/svtest/index.html

任何帮助或指导将不胜感激!感谢。

2 个答案:

答案 0 :(得分:3)

  

我有SDK&头文件,我知道对象是什么类,我需要调用什么方法(它​​只有实例方法),我只是无法识别目标对象。

如果这是一个公开声明的具有公开声明的实例方法的类(即,您拥有该类的标题并且其中包含实例方法),则此应用程序的API中可能有一种方法可以获取该类的实例。您要么自己创建一个,要么应用程序有一个(或更多)并提供获取它(或它们)的方法。查看相关课程的标题和其他标题。

我最初说“必须有一种方法......”,但我改变了它,因为标题有实例方法的另一个原因是:应用程序开发人员不打算使用这些实例方法进行插件使用(和没有恰当地标记它们,或者并不意味着在应用程序/ SDK中包含该标题(它们偶然包含它)。您可能需要向应用程序开发人员寻求指导。

如果它不是公开声明的类或其实例方法未公开声明,则应用程序不支持您使用该类的实例。这样做违反了API合同 - 不是法律合同,而是应用程序对其插件的期望。如果您违反API合同,您将导致意外行为(无论是在您自己的机器上/在您自己的测试中)还是将来。

如果类的公共声明只包含类方法,那么你所追求的可能根本就不是实例 - 你应该将这些消息发送给类本身。

答案 1 :(得分:1)

如果没有在创建字典时在字典中注册每个实例,则无法做到这一点。即,在更高级别覆盖一些常见的工厂方法来执行此簿记工作。当你使用你可能无法控制的代表时,这将会失败,请记住这一点。

我确实有必要甚至做到这一点,但我不知道你的问题以及我可能需要,推荐一种不同的,更恰当的方式来完成手头的实际任务。

正如上述的必然结果;我确实看过运行时,看看有没有我真正忘记的东西,但没有。所以我上面关于你要求自己做簿记的陈述仍然让我害怕。

编辑:

根据你的图表(我的道歉,在我发布这个答案之后才注意到链接);我建议如果您控制返回给您的类,只需向它们添加属性即可。即,添加一个可以设置并保持唯一的“名称”属性。然后只需将消息传递给每个实例,检查该对象是否是您想要的对象。它不是特别聪明或类似的东西,但它应该适合你的目的。