Xcode 3.2 と Xcode 4 の間のコード補完の違いに対処する同様の質問を見ました。私の質問は、Xcode (3.2) の特定の動作に対応しています。
クラス拡張で「プライベート」メソッドを宣言すると、これらのメソッドはコード補完リストに表示されますが、表示されるべきではありません。
例 (AClass.m):
#import "AClass.h"
@interface AClass()
- (void)someMethod;
@end
@implementation AClass
//...
- (void)someMethod
{
// do something here
}
//...
@end
AClass.h を他のクラスにインポートして AClass インスタンスを作成すると...
AClass *test = [[AClass alloc] init];
Xcode のコード補完は、「プライベート」メソッド「someMethod」を示しています。
[test som // Shows someMethod, though it shouldn't be visible here
その時点で、このメソッドは、ヘッダー ファイルで定義されていないため、ここでは不明であるため、表示されるべきではありませんが、表示されます。その時点でメッセージ [test someMethod] を送信してビルドすると、期待どおりにオブジェクトが応答しない可能性があるという警告が表示されます。
実際には応答しますが、これは、特に私のクラスを使用したい他の誰かにとって、紛らわしい動作です。
これは @property / @synthesize にも影響します。これらは「メソッドを置き換えるだけ」だからです。私は、a) 同種コードを持ち、b) ivar の使用に影響を与えることができる (遅延インスタンス化など) ために、プロパティによってすべてのプライベート ivar にアクセスしたいと考えています。一方、すべてのプライベートなものは、クラスを使いやすくするために、(コード補完で) 誰にも見えないようにする必要があります。
この動作を変更する方法はありますか?
Xcode 3.2 でコンテキストの検証が欠落していることが理由ですか?コード補完でこの種のメソッドが表示されるべきではないのに、なぜ表示されないのでしょうか?
その動作は Xcode 4 で異なりますか (コンテキスト検証のため)?
Xcode 4に切り替えて適応する前にプロジェクトを完了したかったので、私はまだXcode 3.2を使用しています.