2011-01-30 8 views
0

私は2つのクラスを持っています。一つは、基本的には他のいくつかの修正を加えて、第二のと同じファイルを使用して作成されたが、彼らは特別に(このようなものを持っている)彼らの宣言ファイル...Xcode - 緑の変数x黒の変数

@protocol myClassDelegate <NSObject> 

// delegate protocol definition 

@end 


@interface myClass : UIView { 
id myObject; 
UIView *oneView; 
} 

@property(nonatomic,assign) id<myClassDelegate> delegate; 
@property(nonatomic,retain) UIView *oneView; 

、その後にについては、基本的に同じであるI @synthesize oneView、delegateを持っている。 on。

表示されるコードは、両方のクラスに共通です。両方のクラスの実装インサイド

、私は例えば、数回の両方のオブジェクトを使用します。

[delegate doStuff]; // <-- do you see this blue delegate here? Xcode put it green when it is declared on .h first. 

私の最初のクラスには、oneViewまたはデリゲートのすべての発生がXcodeので緑色で示され(下の画像を参照してください) 。 2番目のクラスでは、黒で表示されます。私は、一般的に、この緑色の単語は、変数が宣言で識別され、そのクラスの「グローバル」であることを認識しているとみなします。一般に黒の変数はローカルインスタンスを意味します。

質問は、これらの変数の1つが、私の意図なしに、割り当てられていないという問題を、黒で表示されているクラスに正確に割り当てていることです。

クラス内に(deallocを除いて)その変数はリリースされていませんが、アプリケーションの実行中に両方のクラスを使用して作成されたオブジェクトは常に存続します。

何が問題なのですか。事前に

exampla of what I consider correct

感謝。

+0

デリゲートのvarを解放してはいけません。これは、割り当てプロパティです。 – Felix

+0

申し訳ありませんが、コードに誤字がありました。 oneViewはretainとして宣言されます。 AntこのoneViewは、あるクラスでは黒で、他のクラスでは緑で表示されます。私に問題を与えているクラスは、変数が黒であるクラスです。 – Roger

答えて

0

、割り当てるとしてプロパティをマークした場合、あなたは、そのクラスでそれを解放してはなりません。これにはdeallocが含まれます。あなたの書き出しから、deallocでデリゲートを解放していたようでした。変数をdeallocでnilに設定するか、使用したことが分かっている場合は、代理人が誤って他の場所に解放されてもクラッシュすることはありません。

色付けに関しては、同じ方法で両方のファイルに "MyClassDelegate"をインポートした場合にのみ影響が出ると私は思っています。

+0

ありがとう!!!!!!!!!!!!! – Roger

1

XCodeエディタの単語の黒色は、XCodeがこの単語をインスタンス変数として検出していないことを意味します。あなたはdelegateインスタンス変数を宣言するのを忘れたのでしょうか?したがって、エラーはdelegateの割り当てを解除する必要があります。

注:あなたはそれの好みを調べて、Xcodeで色を強調構文を変更することができます。 enter image description here

+0

ありがとう!問題はタイプミスでした。 – Roger