我是一个老派程序性的狗(自80年代中期以来没有做任何编程,所以我可能甚至不能学习新的技巧),但是OOP让我头晕目眩!我的问题是:
is there any means at all to
“discover/find/identify” an instance
of an object of a known class,given
that some OTHER unknown process
instantiated it?
例如.完成这种情况的东西:
(id) anObj = [soMetarget getMostRecentInstanceOf:[aKnownClass class]];
就此而言,“getAnyInstance”或“getAllInstances”也可能起到作用.
背景:我正在尝试为商业应用程序编写一个插件,因此应用程序在幕后完成了大量繁重工作.
我有SDK&头文件,我知道对象是什么类,我需要调用什么方法(它只有实例方法),我只是无法识别目标对象.
我花了不少时间和数天来浏览Apples文档,教程以及Web上的大量示例/示例代码(包括Stack Overflow),然后空出来.似乎一切都需要一个已知的目标对象才能工作,而我只是没有.
由于我可能没有根据需要清楚地表达我的问题,我已经建立了一个网页,图表和图表.工作示例页面说明:
http://www.nulltime.com/svtest/index.html
任何帮助或指导将不胜感激!谢谢.
解决方法
I have the SDK & header files,I know what class the object is,and what method I need to call (it has only instance methods),I just can’t identify the object for targetting.
如果这是一个公开声明的具有公开声明的实例方法的类(即,您拥有该类的标头并且其中包含实例方法),则此应用程序的API中可能有一种方法可以获取该类的实例.您要么自己创建一个,要么应用程序有一个(或更多)并提供获取它(或它们)的方法.查看相关类的标题和其他标题.
我最初说“必须有一种方法……”,但我改变了它,因为标题有实例方法的另一个原因是:应用程序开发人员不打算使用这些实例方法进行插件使用(并没有适当地标记它们,或者并不意味着在应用程序/ SDK中包含该标题(它们偶然包含它).您可能需要向应用程序开发人员寻求指导.
如果它不是公开声明的类或其实例方法未公开声明,则应用程序不支持您使用该类的实例.这样做违反了API合同 – 不是法律合同,而是应用程序对其插件的期望.如果您违反API合同,您将导致意外行为(无论是在您自己的计算机上/在您自己的测试中)还是将来.
如果类的公共声明只包含类方法,那么您所追求的可能根本就不是实例 – 您应该将这些消息发送给类本身.