2012-03-28 6 views
2

.hファイルで多くの変数を宣言するのが良いプログラミング方法であるかどうかは不思議です。.hファイル内の変数を宣言する

私はxcodeとobj-cを学習している私の最初のアプリを書いています。このiosアプリケーションにはxib、.m、および.hファイルが1つだけあります。私は自分の中で何度も何度も何か変わったことがあるのですが、.mファイルのさまざまな方法や場所で使う必要のある変数があります。変数をグローバルにするような.hファイルで宣言してしまいます。私はそれらの多くを持っていることをお勧めしないと思います。

このファイルは.hファイルで多くの変数を宣言していますか、それとも別の方法でアプローチするべきですか?私は他の方法でそれにアプローチする必要があり

おかげ

答えて

2

は.hファイルまたは で宣言された変数の多くを持ってしても大丈夫/この安全ですか?

.hに多くの変数を含めることは絶対に問題ありません。コンパイル時間を少し増やし、バイナリのサイズを任意の量だけ増やします。それが気になる場合は、実装をいくつかのカテゴリに分割してください。私は私の自己私は.Mファイルに異なる方法/場所で使用する必要がある特定の変数を持っていると私はちょうど 思わ.hファイルでそれを宣言してしまう多くの時間を見つける

私は 変数をグローバルにしていますが、それは をたくさん持っていると良い考えです。

1つのメソッドの外部でアクセスされる変数は、常に強い参照が必要な場合や外部クラスからアクセスする必要がある場合はプロパティとしてiVarsとして宣言する必要があります。グローバル変数は異なる方法であり、あなたはそれについて心配する必要はありません。

+0

'UI'(およびそのサブクラス)変数の数を、' tag'を使用して参照することにより、いつでも減らすことができます – tipycalFlow

1

.hファイルは、クラスのパブリックインターフェイスです。それには、他のクラスが知る必要があるプロパティとメソッドのみが含まれている必要があります。

ivファイルと内部メソッドとプロパティを.mファイルのクラス継続で宣言することができます(これは非常に一般的であり、UIViewControllerサブクラスのテンプレートに自動的に含まれます)。

@implementationの直後に中括弧でivarsを宣言することもできます。

iOS5では、宣言されたivarsはデフォルトで強力な参照であるため、プロパティやアクセサメソッドを使用する必要はありませんが、その選択は残りのクラスによって異なります。たとえば、遅延インスタンス化を使用したり、変数を取得または設定するときに他のタスクやKVOを実行することができます。その場合は、プロパティまたはメソッドを使用してアクセスしたい場合は、の場合は ivars 、他のものではなく、ちょっと乱雑に見えるようになります。

0

必要に応じて.hファイルのインターフェイスで多くの変数を宣言しても問題ありません(他の回答で触れられているように)。しかし、公開する必要のないインスタンス変数を.mファイル内のカテゴリに移動することを検討することが賢明でしょう。たとえば、次のように

#import <Foundation/Foundation.h> 

@interface SomeClass : NSObject { 
    NSDictionary *publicDict; 
    NSArray *privateArray; 
} 

@property (nonatomic, strong) NSDictionary *publicDict; 

-(void)publicMethod:(id)anObj; 

@end 

とIn:.hの中

。メートルのファイル:

#import "SomeClass.h" 

@interface SomeClass() //Category that denotes private methods 

@property (nonatomic, strong) NSArray *privateArray; 

-(void)privateMethod; 

@end 

@implementation 

@synthesize publicDict; 
@synthesize privateArray; 

-(id)init { 
    //... 
} 

-(void)publicMethod:(id)anObj { 
    //.. 
} 

-(void)privateMethod { 
    //.. 
} 

@end 

これは、コンパイラは、そのカテゴリに含まれる民間の任意の方法が外部のクラスによってアクセスされるたびに警告を発するようになります。さらに、Objective-Cのカプセル化の側面を遵守するために広く受け入れられている方法です。