2

这是我收到此错误时的原始代码

类A.h

+(ClassA*)methodA:(NSData*)data;

@property (nonatomic, strong) NSMutableArray    *arr; 
@property (nonatomic, strong) RXMLElement     *rxmlRoot; 

@结尾

类A.m

+(ClassA*)methodA:(NSData*)data {

//NSLog(@"class is %@",[name class]);
ClassA *ClassA   =   [[Stores alloc] init];
arr        =   [NSMutableArray array];
rxmlRoot   = [RXMLElement elementFromXMLData:data];

}

我正在审查我的代码,现在我有两个选项来修复代码

选项A

类A.h

+(ClassA*)methodA:(NSData*)data;

@property (nonatomic, strong) NSMutableArray    *arr; 
@property (nonatomic, strong) RXMLElement     *rxmlRoot; 

@end

类A.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

}

选项B

类A.h

+(ClassA*)methodA:(NSData*)data;

@end

类A.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 也是一个很好的方法吗?

请就这个问题给我建议,顺便说一下,如果我在某处犯了错误,请纠正我。谢谢

4

2 回答 2

2

在 Objective-C 中没有“类变量”这样的东西。当您按原样声明变量时,static实际上是一个全局变量,该变量仅限于编译它的文件的范围或方法/函数(或子表达式)的范围。

摆脱Class.设置变量的调用部分;这.m仅适用于类的文件;这通常是您想要的模式(通常不鼓励真正的全局变量 - 但有时很有用)。

于 2012-05-08T16:26:00.003 回答
1

使用数据参数创建指定的初始化程序。每个类都应该有一个指定的初始化器。

在您的类方法中调用传入的指定初始化程序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。

于 2012-05-08T14:58:55.557 回答