这是我收到此错误时的原始代码
ClassA.h
+(ClassA的*)了methodA:(NSData的*)的数据;
@property (nonatomic, strong) NSMutableArray *arr; @property (nonatomic, strong) RXMLElement *rxmlRoot;
@end
ClassA.m
+(ClassA *)methodA:(NSData *)data {
//NSLog(@"class is %@",[name class]); ClassA *ClassA = [[Stores alloc] init]; arr = [NSMutableArray array]; rxmlRoot = [RXMLElement elementFromXMLData:data];
}
我正在审核我的代码,现在我有两个选项来修复代码
OptionA
ClassA.h
+(ClassA*)methodA:(NSData*)data; @property (nonatomic, strong) NSMutableArray *arr; @property (nonatomic, strong) RXMLElement *rxmlRoot; @end
ClassA.m
+(ClassA*)methodA:(NSData*)data { //NSLog(@"class is %@",[name class]); ClassA *ClassA = [[Stores alloc] init]; ClassA.arr = [NSMutableArray array]; <----- this has been modified ClassA.rxmlRoot = [RXMLElement elementFromXMLData:data];<----- this has been modified }
OptionB
ClassA.h
+(ClassA*)methodA:(NSData*)data; @end
ClassA.m
static RXMLElement *rxlRoot; <----- this has been added as class variable static NSMutableArray *arr; <----- this has been added as class variable +(ClassA*)methodA:(NSData*)data { //NSLog(@"class is %@",[name class]); ClassA *ClassA = [[Stores alloc] init]; arr = [NSMutableArray array]; rxmlRoot = [RXMLElement elementFromXMLData:data];
}
我尝试使用optionA或optionB,编译器不会抱怨任何内容,代码也能正常工作。
我在optionB后面看到许多帖子,它们创建了类变量。
问题:当我们处理类方法和类变量时,optionA也是一个很好的方法。
请就此问题向我提出建议,顺便说一下如果我在某个地方犯了错误,请纠正我。感谢
答案 0 :(得分:2)
Objective-C中没有“类变量”这样的东西。当您将变量声明为static
时,它实际上是一个全局变量,它仅限于在其中编译的文件的范围或方法/函数(或子表达式)的范围。
摆脱调用的Class.
部分来设置变量;这只适用于Class的.m
文件;这通常是你想要的模式(通常不鼓励真正的全局变量 - 尽管有时很有用)。
答案 1 :(得分:1)
使用data参数创建指定的初始值设定项。每个班级都应该有一个指定的初始化程序。
在您的类方法中,调用传入data
。
以下是示例代码:
//ClassA.h
@class RXMLElement;
@interface ClassA : NSObject
+(ClassA*)methodA:(NSData*)data;
-(id)initWithData:(NSData*)data;
@property (nonatomic, strong) NSMutableArray *arr;
@property (nonatomic, strong) RXMLElement *rxmlRoot;
@end
//ClassA.m
@implementation ClassA
@synthesize arr;
@synthesize rxmlRoot;
+(ClassA*)methodA:(NSData*)data {
return [[ClassA alloc] initWithData:data];
}
-(id)initWithData:(NSData*)data {
self = [super init];
if (self) {
arr = [NSMutableArray array];
rxmlRoot = [RXMLElement elementFromXMLData:data];
}
return self;
}
@end
示例中假设了ARC。