以下のテストコードを取得しました。
(この例では、retain なしではインターフェイスを静的に割り当てることができないことに直面しました。)
このコードブロックによって、retain とは何かを理解できました。
これがリークするかどうかを確認したいのですが、どこかでリリースする必要があります。単純に、配列を毎回再初期化したくありません。静的にしました。(メモリには不利ですが、速度には有利です)
この保持された静的配列をどこかで解放する必要がありますか? それは安全なコードですか、それとも静的を完全に削除して単語を保持し、単にarrayObjectsメソッドで古典的に初期化する必要がありますか? それで、あなたは私のために何を好むかもしれませんか?
-(NSUInteger)getCoordYByX:(int)ax
{
NSUInteger ret_=-1;
static NSArray *coordsX=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
coordsX=[[NSArray arrayWithObjects:
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:170],
[NSNumber numberWithInt:190],
[NSNumber numberWithInt:210],
[NSNumber numberWithInt:350],
nil]retain];
/*it is more longer. cropped for test purposes*/
});
ret_=[[coordsX objectAtIndex:ax] unsignedIntegerValue];
return ret_;
}
結論として
、なぜ static は配列の初期値を保持しないのでしょうか? そして
、保持を使用したい場合、メモリリークが発生する可能性がありますか?