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 に答える