我有一个以下的测试代码。(通过这个例子,我发现接口不能在没有保留的情况下静态分配。)
通过这段代码,我理解了什么是真正的保留(retain)。我想确保这是否会造成泄漏,我应该在其他地方释放它。简单地说,我不想每次都重新初始化数组,并使其静态化。(虽然会占用更多内存,但速度更快。)
我应该在哪里释放这个被保留的静态数组?这是安全的代码吗?还是我完全删除static和retain这些关键字,只是经典地使用arrayObjects方法进行初始化?那么你对我来说更喜欢什么?
通过这段代码,我理解了什么是真正的保留(retain)。我想确保这是否会造成泄漏,我应该在其他地方释放它。简单地说,我不想每次都重新初始化数组,并使其静态化。(虽然会占用更多内存,但速度更快。)
我应该在哪里释放这个被保留的静态数组?这是安全的代码吗?还是我完全删除static和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_;
总结:
为什么静态数组不能保留初始值?
如果我想使用retain,可能会发生内存泄漏吗?