例如,我继承了 UILabel
并添加了一个名为 -verticalTextAlignment
的方法或属性来垂直对齐文本。
并且在未来,如果下一版本的 SDK 或 iOS 添加了具有相同名称的方法或属性,那么我的应用程序可能会崩溃或出现意外行为。
*即使您使用类别而不是子类化,也会出现此问题。
问题1
如何在 Objective-C 中避免这种意外覆盖?
我认为您可以通过为所有方法和属性添加前缀来避免这种情况,例如 -XXX_verticalTextAlignment
。但这不现实,不是吗?
问题2
我知道这种意外覆盖发生在编译时或更新 iOS SDK、OSX SDK 或 XCode 时。
但是更新 iPhone 的 iOS 版本时是否也可能发生?
例如,你的应用是否可能在iOS5上运行良好,但由于iOS6意外覆盖而无法在iOS6上运行。(你可以将iOS5和iOS6替换为任何版本,例如iOS5.0和iOS5.1)
最佳答案
是的,您可以使用自己的前缀,但这并不常见。
是的,它可能发生在操作系统更新之后; Objective-C 是一种非常动态的语言,消息被发送到方法而不是被调用,就像在其他语言中一样。这些事情是在运行时解决的,而不是编译时。
底线是肯定的,您可能会不小心覆盖 future 的基类方法,唯一的解决方案是在它发生时出现并重命名该方法。
关于iphone - 如何避免在 Objective-C 中意外覆盖方法或属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049763/