如果你只想声明一个新类,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
方法中初始化这些。
而且我注意到您正在编写自己的“setter”(例如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
在声明了属性之后,您现在可以让编译器合成“setter”和“getter”。对于这些@property
声明,如果您使用的是最新的编译器(Xcode 4.4 ... 大约一周前发布),则无需@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 的首字母小写约定。类以大写字母开头,变量以小写字母开头。