在iOS库中重命名类的最佳方法是什么?

时间:2015-03-21 01:36:44

标签: ios objective-c deprecated

如果我想重命名一个在我的iOS库中广泛使用且其API也公开的类,那么最好的方法是什么?
理想情况下,我希望旧名称仍然存在,标记为弃用警告,以便人们可以优雅地切换到使用新语法。但是因为我无法保留这两个类,所以我希望开发人员仍然能够使用已弃用的API,但它内部只是调用自己的重命名版本。

我正在玩#define__attribute__((deprecated))@compatibility_alias,但没有办法完成我想要做的所有事情。

2 个答案:

答案 0 :(得分:2)

首先,使用重构将类重命名为新名称。 那么,你想支持旧名称但是有了折旧,你可以使用typedef语句:

__attribute__((deprecated)) typedef NewClassName OldClassName;

答案 1 :(得分:1)

假设您正在将ABC重命名为XYZ

您可以使用重构工具(编辑 - >重构 - >重命名...)将ABC重命名为XYZ。您可能还需要进行一些手动文件重命名。

如果您希望在重命名后仍支持ABC,则需要创建一个名为ABC的新类,该邮件会将邮件转发给XYZ。关于新的"假的" ABC类,将所有方法标记为已弃用。

你可以手动实现这些。或者,如果新课程的结构完全不同,您可以使用message forwarding

  

但是,在宣布错误之前,运行时系统为接收对象提供了第二次处理消息的机会。

基本上,不要在新的"假的"上实施这些方法。 ABC - 只需实施forwardInvocation:即可将其传递给正确的班级。