Objective-C子类化和未来的兼容性

Eon*_*nil 4 objective-c subclassing

Objective-C支持子类化和类别,允许您将方法添加到现有类.这是我的情况.

// Made at earlier than iOS 5.x
@interface MyVC : UIViewController
- (void)childViewControllers;
@end
Run Code Online (Sandbox Code Playgroud)

childViewControllers在iOS 5.0之前没有这种方法.我可以毫无顾虑地添加方法.但现在UIViewController有一个名字的方法.如果我构建为iOS 4.x编写的遗留代码,该方法将被覆盖,并且会产生不可预测的结果.

有没有什么技术可以防止我的代码出现这种问题?这可能发生在类别或(可能)其他事情上.

rma*_*ddy 6

一种选择是为所有方法名称添加前缀.在扩展标准框架类时随时执行此操作.

同样的技术用于类名,以避免将来可能发生冲突,因为Java中没有命名空间.

这是另一个需要考虑的问题.这种情况多久发生一次?您需要权衡必须处理罕见名称冲突的工作,方法是返回并重命名您的方法并更新受影响的代码,而不是必须提出前缀命名方案并每天一遍又一遍地键入这些额外的字符.

  • (+1)另见[私人方法](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282- 1003829)在"可可的编码指南"中,Apple建议何时使用前缀. (3认同)