新しいクラス を宣言するだけの場合はState
、インスタンス変数を次のように宣言します (中かっこ内で、明示的な初期化は行いません)。
@interface State
{
NSString *forgotPassword;
NSMutableArray *categorySelection;
NSMutableArray *subCategorySelection;
NSString *string;
int tag;
int alertTag;
NSURL *stringURL;
NSURL *videoURL;
NSURL *imageURL;
int loginCount;
NSMutableArray *album;
NSString *videoFileName;
int videoCounting;
int loginUserId;
int imageTag;
}
@end
ARC を使用している場合は、これらすべてをゼロまたはゼロに設定するため、それらを初期化する必要はありません。ARC を使用していない場合 (なぜ使用しないのか)、メソッドでこれらを初期化しますinit
。
そして、あなたが独自の「セッター」を書いていることに気付きました(例setForgotPassword
)。コンパイラにこれを行わせたい (つまり、それらを「合成」する) 場合は、まずこれらの変数をプロパティとして宣言します。次に例を示します。
@interface State
@property (nonatomic, strong) NSString *forgotPassword;
@property (nonatomic, strong) NSMutableArray *categorySelection;
@property (nonatomic, strong) NSMutableArray *subCategorySelection;
@property (nonatomic, strong) NSString *string;
@property int tag;
@property int alertTag;
@property (nonatomic, strong) NSURL *stringURL;
@property (nonatomic, strong) NSURL *videoURL;
@property (nonatomic, strong) NSURL *imageURL;
@property int loginCount;
@property (nonatomic, strong) NSMutableArray *album;
@property (nonatomic, strong) NSString *videoFileName;
@property int videoCounting;
@property int loginUserId;
@property int imageTag;
@end
プロパティを宣言したら、コンパイラに「セッター」と「ゲッター」を合成させることができます。これらの@property
宣言について、最新のコンパイラ (Xcode 4.4 ... は 1 週間ほど前にリリースされました) を使用している場合は@synthesize
、@implementation
. ただし、以前のコンパイラを使用している場合は@synthesize
、すべての@property
宣言に含める必要があります。
@implementation State
@synthesize forgotPassword = _forgotPassword;
@synthesize categorySelection = _categorySelection;
@synthesize subCategorySelection = _subCategorySelection;
@synthesize string = _string;
// etc.
これを行うと (a を宣言して@property
からそれを宣言する@synthesize
)、コンパイラは舞台裏でインスタンス変数を作成し、自動的に "setter" (つまり、"set" の後に変数名が続くメソッド) を生成します。 「setForgotPassword」) と「getter」メソッド (変数の内容を取得する、変数と同じ名前のメソッド) を各プロパティに使用します。これらすべてのプロパティについて、@synthesize forgotPassword = _forgotPassword
はインスタンス変数も生成しますが、ivar 名の前にアンダースコアを含めることで、プロパティself.forgotPassword
とインスタンス変数を混同しないように注意してください_forgotPassword
。
それをカテゴリにしたい場合 (基本的には、既存のクラスを参照することによって指定され、State
その後にカテゴリ指定子が続く、既存のクラスに適用される新しいメソッドの追加State (private)
)、新しい変数を含めることはできません。それが本当にあなたの意図であったかどうかはわかりません(私はそれを疑っています)。しかし、本当にそれを行いたいが、これらの新しい変数が本当に必要な場合は、State
次のように代わりに既存のクラスをサブクラス化できます。
@interface StateSubClass : State
{
NSString *forgotPassword;
NSMutableArray *categorySelection;
NSMutableArray *subCategorySelection;
NSString *string;
int tag;
int alertTag;
NSURL *stringURL;
NSURL *videoURL;
NSURL *imageURL;
int loginCount;
NSMutableArray *album;
NSString *videoFileName;
int videoCounting;
int loginUserId;
int imageTag;
}
@end
また、お気付きかもしれませんが、変数名も Apple の最初の小文字の規則に準拠するように変更しました。クラスは大文字で始まり、変数は小文字で始まります。