4

プライベート メソッドを使用してアプリのデザインを改善しようとしています。.NET から来て、.m ファイルでこれらのメソッドを宣言しているため、少し混乱していますが、他のファイルからはまだ表示されています。つまり、まだアクセス可能です。

.m ファイル:

@interface NSContentWebServiceController (private)

- (NSString *)flattenHTML:(NSString *)html;
- (NSString *)cleanseStringOfJsonP:(NSString *)jsonP;
- (void)retrieve:(NSasdf *)hasdel :(NSDictionary *)rootList;   
- (NSString *)removeHTMLTagsFromString:(NSString *)aString;

@end
4

2 に答える 2

5

JoostK が言ったように、Objective-C には、C++、Java、C# にあるようなプライベート メソッドはありません。

その上、式@interface NSContentWebServiceController (private)は Objective-C のいわゆるカテゴリを定義します。ここでの用語privateは単にカテゴリの名前であり、意味はありません。ここにあるようなものを持っていてもyellowBunny、同じ効果が得られます。カテゴリはクラスをいくつかの部分に分割するための手段に過ぎませんが、実行時にはすべてのカテゴリが有効になります。カテゴリはオブジェクト クラスに新しいメソッドを追加できるだけで、新しい変数を追加できないことに注意してください。

@interface MyClass()プライベート カテゴリの場合は、別のブロックは必要なく、@implementation MyClass(yellowBunny)メイン ブロックにメソッドを追加するだけでよいため、 のように匿名カテゴリを使用することをお勧めします@implementation

詳細については、Objective-C に関するウィキペディアのエントリの「カテゴリ」セクションを参照してください。

于 2010-09-28T10:57:27.130 に答える
3

プライベート メソッドは、ヘッダー ファイルに記載されていないという点でのみプライベートです。このため、それらをプロジェクトに組み込むことはできず#import、コンパイラは「認識されないセレクター」などについて警告します。

これらのメソッドは、メソッドをプライベートにするプロトタイプを宣言する場所であるため、パブリック メソッドと同じように呼び出すことができます。Objective-C には、隠された、本当にプライベートなメソッドなどはありません。

実行時には、イントロスペクションを使用して常にすべてのメソッドを見つけることができるため、メソッド/プロパティを完全に非表示にする方法は実際にはありません。

すべての作業を行うオブジェクトを指すインスタンス変数を追加することもできid _internalます。その場合、プライベート メソッドを呼び出すのは少し難しくなりますが、不可能ではありません。

于 2010-09-28T10:38:55.937 に答える