重构旧代码,我想更改以下方法:
- (id)initWithFrame:(CGRect)frame
{
// original logic
}
为:
- (id)initWithFrame:(CGRect)frame andDelegate:(id<myDelegateProtocol>)delegate
{
// original logic
if(delegate)
{
_delegate = delegate;
}
}
为了确保没有依赖代码中断,我更新原始方法以引用旧方法,如下所示:
- (id)initWithFrame:(CGRect)frame
{
return [self initWithFrame:frame andDelegate:nil];
}
但是,如果有人仍在使用该原始方法,我希望Xcode发出警告(类似于iOS中的方法被弃用)。理想情况下,如:
- (id)initWithFrame:(CGRect)frame __warning__(@"This method has been replaced to ensure that you set the delegate. Please update your code.");
{
return [self initWithFrame:frame andDelegate:nil];
}
请注意,这些弃用可能会在新版本iOS发布之前发生。
答案 0 :(得分:3)
在界面文件中,执行以下操作:
- (id)initWithFrame:(CGRect)frame__attribute__((deprecated("Use initWithFrame: andDelegate")));
答案 1 :(得分:2)
为了完整性,我还要补充一点,如果你想使用特定方法阻止某人,你可以使用“不可用”标志,例如
- (id)initWithFrame:(CGRect)frame__attribute__((unavailable("Use initWithFrame: andDelegate")));
这会引发错误,而不是警告。
您可以在clang.llvm.org
找到更多信息