如果我想重命名一个在我的iOS库中广泛使用且其API也公开的类,那么最好的方法是什么?
理想情况下,我希望旧名称仍然存在,标记为弃用警告,以便人们可以优雅地切换到使用新语法。但是因为我无法保留这两个类,所以我希望开发人员仍然能够使用已弃用的API,但它内部只是调用自己的重命名版本。
我正在玩#define
,__attribute__((deprecated))
和@compatibility_alias
,但没有办法完成我想要做的所有事情。
答案 0 :(得分:2)
首先,使用重构将类重命名为新名称。 那么,你想支持旧名称但是有了折旧,你可以使用typedef语句:
__attribute__((deprecated)) typedef NewClassName OldClassName;
答案 1 :(得分:1)
假设您正在将ABC
重命名为XYZ
。
您可以使用重构工具(编辑 - >重构 - >重命名...)将ABC
重命名为XYZ
。您可能还需要进行一些手动文件重命名。
如果您希望在重命名后仍支持ABC
,则需要创建一个名为ABC
的新类,该邮件会将邮件转发给XYZ
。关于新的"假的" ABC
类,将所有方法标记为已弃用。
你可以手动实现这些。或者,如果新课程的结构完全不同,您可以使用message forwarding:
但是,在宣布错误之前,运行时系统为接收对象提供了第二次处理消息的机会。
基本上,不要在新的"假的"上实施这些方法。 ABC
- 只需实施forwardInvocation:
即可将其传递给正确的班级。