2

重构旧代码,我想更改以下方法:

- (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 发布之前发生。

4

2 回答 2

3

在接口文件中,执行以下操作:

- (id)initWithFrame:(CGRect)frame__attribute__((deprecated("Use initWithFrame: andDelegate")));
于 2013-02-11T13:00:35.420 回答
2

为了完整起见,我还要补充一点,如果您想阻止某人使用特定方法,您可以使用“不可用”标志,例如

- (id)initWithFrame:(CGRect)frame__attribute__((unavailable("Use initWithFrame: andDelegate")));

这会引发错误,而不是警告。

您可以在clang.llvm.org找到更多信息

于 2013-02-11T20:36:59.533 回答