假设我正在编写一个在iOS7和iOS6上运行的应用程序。我有一个实现协议的类 - 仅在iOS7中可用的协议(在本例中为NSLayoutManagerDelegate)。
一切似乎都可以在 iOS6 上运行 - 我在 iOS6 上跳过了实例化实现协议的类的代码 - 所以看起来我很好。
不过,在应用程序加载过程中没有看到错误,我有点惊讶;显然加载程序可以让我实现不存在的协议。对我来说很幸运!
是否有任何 Apple 文档讨论这种情况?安全吗?我应该注意什么陷阱吗?
这没有问题,有点像实现一个仅由系统为某些版本向上调用的方法。
在最坏的情况下,您可以说您已经生成了一些占用某处空间的代码("磁盘",如果您可以在iOS上调用它,也可能是RAM),而没有在旧版本上使用,但这是最小的。
这一切都需要使用包含相关协议的 SDK 编译代码 - 如果使用 <ProtocolName>
构造并包含相应的标头声明符合协议。但这是给定的,因为它不会以其他方式编译。