iphone - 如何避免在 Objective-C 中意外覆盖方法或属性

标签 iphone objective-c ios

例如,我继承了 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)

最佳答案

  1. 是的,您可以使用自己的前缀,但这并不常见。

  2. 是的,它可能发生在操作系统更新之后; Objective-C 是一种非常动态的语言,消息被发送到方法而不是被调用,就像在其他语言中一样。这些事情是在运行时解决的,而不是编译时。

底线是肯定的,您可能会不小心覆盖 future 的基类方法,唯一的解决方案是在它发生时出现并重命名该方法。

关于iphone - 如何避免在 Objective-C 中意外覆盖方法或属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049763/

相关文章:

iphone - ios - iPhone : How to create animation UItableviewcell when edit like native ios alarm clock app

objective-c - 如何使用 NSString drawInRect 使文本居中?

objective-c - 我什么时候需要担心 iOS 应用程序中的线程安全?

ios - 第一个项目,ios模拟器 View 被截断

ios - 如何将 pickerColumn 的宽度调整为 pickerColumns 内的文本?

ios - Swift 4 - 将 UITapGestureRecognizer 添加到 subview 图像 - 未调用该方法

iphone - 以编程方式在 iPhone 联系人列表中添加联系人

android - 适用于 visual studio 2015 的 Apache Cordova IOS Camera 插件

iphone - UIToolbar 多行文本

ios - 限制 UIButton 沿 UIBezierPath 路径的移动