1

プライベート メソッドは、クラスの境界内でコードを整理しておくのに便利な構造です。例としては、カスタム UIView サブクラスでの長く巻き上げられた Quartz 2d 命令の構成があります。「.h」で宣言せずに「.m」ファイルにそのようなメソッドを含めることができます。UIView サブクラス '.m' ファイルの実際の例は次のとおりです。

-(void)DoSomethingPrivate {                  //Not declared in interface
    NSLog(@"Does this print a private function?");
}

- (id)initWithFrame:(CGRect)frame            //Declared in inherited interface
{
    self = [super initWithFrame:frame];
    if (self) {
        [self DoSomethingPrivate];           //Error: 'Instance method not found'
    }                                        //... but it works anyway.
    return self;
}

私の問題は、プライベート関数を呼び出す行でコンパイラが「インスタンスメソッド '-DoSomethingPrivate' が見つかりません (戻り値の型のデフォルトは 'id')」という警告を生成することです。この質問への回答から、「名前なし」インターフェイス カテゴリを使用してプライベート メソッド宣言を「非表示」にできることを認識しています。

ただし、Apple のサンプル コードSimpleStocks、ファイル " SimpleStockView.m " を確認すると、名前のないカテゴリ インターフェイスで宣言されておらず、コンパイラの警告も生成されないプライベート関数が含まれています。

//Private Function
    - (void)drawRadialGradientInSize:(CGSize)size centeredAt:(CGPoint)center { 
        ... 
    }

//Is called by this function...
    - (UIImage *)patternImageOfSize:(CGSize)size {
        ...
              //The next line doesn't generate any warnings!
        [self drawRadialGradientInSize:size centeredAt:center];
        ...
    }

Apple のサンプル コードのプライベート メソッドがどのようにコンパイラ チェックを回避しているように見えるかについて、誰かが光を当ててくれるとありがたいです。

どうもありがとう。

4

0 に答える 0