2012-04-27 12 views
2

最近、XCode 4.2とApple LLVMコンパイラ3.0/LLVM-GCCを使用して、私の会社のiOSプロジェクトで作業していたときにいくつかの問題が発生しました。以下は目的C:クラスのインタフェースで宣言されていないインスタンス変数の警告を生成するには?

タイプミスが私の最高の推測に、実際に私はそれをやった人わからない(コンパイラをコンパイルエラーまたは警告を生成したり、実行時ではないだろうコード

A.h 
@interface A{ 
    int _count; 
}; 
@property(nonatomic,assign) count; 
@end 
A.mm 
@implementation A 
@synthesize count = _cont;//note a typo here !!! 
//... I use _count in below code 
@end 

コンパイラであるべきです)は、私たちのために_contインスタンスivarを生成します。

この機能はカプセル化に最適です。私たちのヘッダーファイルははるかにクリーンかもしれません。しかし、このようなタイプミスは気付きにくいです。だから私はこのケースの警告を生成するための設定があるのだろうか?私は何の発見もせずにクラングの公式サイトを検索します。

私は、クラスインタフェースでインスタンスを宣言しないようにと勧めています。常にself.countを使用してください。最初に私はこのコードスタイルが嫌いです。次に、インスタンスの値を変更するだけではなく、 "setCount"メソッドが何かを行う場合があります。最後に、この機能が導入される前に製品を開始しました。私は存在するコードのスタイルを変更したくありません。

誰もが同じ問題に遭遇しますか?良いアイデアやベストプラクティスはありますか?

答えて

0

これはできません。コンパイラはあなたの誤植をどのように認識すべきですか?

また、@synthesize count = _countのように、自分のプロパティに自分のivarを書く必要はないことを認識しておいてください。コードの後半で_count経由でiVarにアクセスするのに十分です。

+0

コンパイラが宣言されたivarの名前を読み込み、プロパティの名前を読んだり、合成されたivarの名前を読んだり、最初の2つの一致と3番目の一致を見たり、 ? "警告。 –

+0

XCode 4.4以来、私たちは@synthesizeを書いたり、バックアップiVarを定義する必要はありません。プロパティを宣言するだけで十分です。私たちは言語とコンパイラの変更に慣れるべきです。それは変更の哲学は次のようです:コンパイラはあなたのためにますます多くのことを行います。不可能であるはずの答えを受け入れる。 –

関連する問題