在 iOS 库中重命名 class 的最佳方法是什么?
What is the best way to rename a class in an iOS library?
如果我想重命名在我的 iOS 库中广泛使用并且其 API 也已公开的 class,最好的方法是什么?
理想情况下,我希望旧名称仍然存在,并标有弃用警告,以便人们可以优雅地切换到使用新语法。但是因为我不能同时保留两个 classes,所以我希望开发人员仍然能够使用已弃用的 API 但它在内部只是简单地调用自己的重命名版本。
我正在尝试 #define
、__attribute__((deprecated))
和 @compatibility_alias
,但没有找到一种方法来完成我想做的所有事情。
假设您要将 ABC
重命名为 XYZ
。
您可以使用重构工具(编辑 -> 重构 -> 重命名...)将 ABC
重命名为 XYZ
。您可能还需要进行一些手动文件重命名。
如果您希望在重命名后仍然支持 ABC
,您需要创建一个名为 ABC
的新 class,将消息转发到 XYZ
。在新的 "fake" ABC
class 上,将所有方法标记为已弃用。
您可以手动实现这些。或者,如果新 class 的结构没有根本不同,您可以使用 message forwarding:
However, before announcing the error, the runtime system gives the receiving object a second chance to handle the message.
基本上,不要在新 "fake" ABC
上实现方法 - 只需实现 forwardInvocation:
以将它们传递给正确的 class.
首先,您使用重构将您 class 重命名为新名称。
然后,您想支持旧名称但贬值,您可以使用 typedef 语句:
__attribute__((deprecated)) typedef NewClassName OldClassName;
如果我想重命名在我的 iOS 库中广泛使用并且其 API 也已公开的 class,最好的方法是什么?
理想情况下,我希望旧名称仍然存在,并标有弃用警告,以便人们可以优雅地切换到使用新语法。但是因为我不能同时保留两个 classes,所以我希望开发人员仍然能够使用已弃用的 API 但它在内部只是简单地调用自己的重命名版本。
我正在尝试 #define
、__attribute__((deprecated))
和 @compatibility_alias
,但没有找到一种方法来完成我想做的所有事情。
假设您要将 ABC
重命名为 XYZ
。
您可以使用重构工具(编辑 -> 重构 -> 重命名...)将 ABC
重命名为 XYZ
。您可能还需要进行一些手动文件重命名。
如果您希望在重命名后仍然支持 ABC
,您需要创建一个名为 ABC
的新 class,将消息转发到 XYZ
。在新的 "fake" ABC
class 上,将所有方法标记为已弃用。
您可以手动实现这些。或者,如果新 class 的结构没有根本不同,您可以使用 message forwarding:
However, before announcing the error, the runtime system gives the receiving object a second chance to handle the message.
基本上,不要在新 "fake" ABC
上实现方法 - 只需实现 forwardInvocation:
以将它们传递给正确的 class.
首先,您使用重构将您 class 重命名为新名称。 然后,您想支持旧名称但贬值,您可以使用 typedef 语句:
__attribute__((deprecated)) typedef NewClassName OldClassName;