- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我需要弃用 Objective-C 协议(protocol)中的一个方法。在普通的类/实例方法上,我在声明后添加 __attribute__ ((deprecated));
。
它似乎不适用于协议(protocol)方法。如果我将它们标记为已弃用并在某个地方使用它们,项目编译正常,没有预期的弃用警告。
这是 Apple LLVM 3.1 的缺陷,还是我做错了什么?
最佳答案
虽然这里的答案提供了一些很好的信息,但它们已经过时了。从 Xcode 5.0 和 LLVM 5.0 开始,似乎可以识别 Objective-C 协议(protocol)方法的弃用警告。在实现该方法时,Xcode 5 会对其进行标记:
Warning: Implementing deprecated method
以下是我用来为已弃用协议(protocol)方法的实现生成弃用警告的步骤:
使用 __deprecated
将协议(protocol)方法标记为已弃用。来自新的 SDK 7.0 文档:
__deprecated causes
the compiler to produce a warning when encountering code using the deprecated functionality.__deprecated_msg()
does the same, and compilers that support it will print a message along with the deprecation warning. This may require turning on such warning with the-Wdeprecated
flag.__deprecated_enum_msg()
should be used on enums, and compilers that support it will print the deprecation warning.
#define __deprecated __attribute__((deprecated))
要弃用您的方法,请执行以下操作:
- (void)aDeprecatedProtocolMethod __deprecated;
仅此一项应该足以让 Xcode 显示弃用警告。但是,您应该执行接下来的几个步骤(知道 Xcode 有时可能非常挑剔)以确保显示警告。
添加带有弃用警告标记的文档注释。请参阅下面的代码示例以了解操作方法:
/** Describe the method here - what does it do, how does it work, etc. Very brief.
@deprecated This delegate method is deprecated starting in version 2.0, please use otherMethodNameHere:withAnExtraParameter: instead. */
- (void)aDeprecatedProtocolMethod __deprecated;
清理项目(⌘+⇧+K)然后构建项目(⌘>+B) - 只是因为 Xcode 有时会很时髦。
我不是 100% 确定此功能是何时何地引入的(可能是 SDK 7.0 和 10.9,或 Xcode 5.0/5.0.1,或 LLVM 5.0)- 但它仍然有效。
关于objective-c - __attribute__ ((deprecated)) 不适用于 objective-c 协议(protocol)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432452/
我是一名优秀的程序员,十分优秀!