gpt4 book ai didi

objective-c - 创建后更改实例化对象的子类

转载 作者:行者123 更新时间:2023-12-03 17:16:27 25 4
gpt4 key购买 nike

我正在创建一个 Cocoa 库,用于连接到我公司制造的嵌入式设备。我有一个父类(super class),我们将其称为 Device,以及许多不同设备型号的子类,我们将其称为 Device1Device2

我需要支持自动检测设备型号,连接并登录设备后即可确定。由于登录代码对于所有设备都是通用的,因此可以在父类(super class)中处理。登录后,设备需要由其模型的适当子类来表示。

我设想实例化 Device 父类(super class)的对象,登录设备以读取模型,然后用适当子类的实例替换该对象,例如 Device1 。我知道可以在 -init 方法中返回不同的对象,但我的问题是到设备的通信可能很长,因此可能应该通过回调/委托(delegate)来实现。

是否可以在-init方法之后更改实例化对象的子类?或者有没有更简单/更好的方法来实现我想要做的事情?

最佳答案

一种方法是使用 NSProxy 的自定义子类的实例而不是 Device 父类(super class)来处理初始登录和设备检测。一旦设备类型已知,您就可以将 NSProxy 设计为将自身转变为相应 Device 子类的实例。

NSProxy 利用 Objective-C 运行时系统的一项功能,它允许其实例在收到发往真实目标实例的消息时注意到。然后,代理可以将消息转发到其目标,或者将自身转变为目标类型的实例并将消息转发到其自身。 (听起来很奇怪,我知道,但在实践中非常酷。)

这是类描述的第一段:

NSProxy is an abstract superclass defining an API for objects that act as stand-ins for other objects or for objects that don’t exist yet. Typically, a message to a proxy is forwarded to the real object or causes the proxy to load (or transform itself into) the real object. Subclasses of NSProxy can be used to implement transparent distributed messaging (for example, NSDistantObject) or for lazy instantiation of objects that are expensive to create.

您的 NSProxy 实现可能包括连接、登录等所需的方法,但不包括由 Device 类实现的方法等级制度。代理实例在检测到设备类型时可以选择目标类。一旦您向它发送由设备(而不是代理)实现的消息,它就会自动将自身转变为该类的实例。

关于objective-c - 创建后更改实例化对象的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5126961/

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