2

これは、このエラーが発生したときの元のコードです

ClassA.h

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

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

@終わり

ClassA.m

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

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

}

コードを確認していますが、コードを修正するための2つのオプションがあります

オプションA

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

}

オプションB

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は、クラスメソッドとクラス変数も扱う場合に従うのに適した方法です。

この問題について私にアドバイスしてください。ちなみに、どこかで間違いを犯した場合は、訂正してください。ありがとう

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 に答える