我试图从一个名为
的函数中获取基于点的结构-(NSArray *) calcRose : (float) theta
{
//first calculate x and y
//we need to get width and height of uiscreen
//myPoint[0] = [UIScreen mainScreen].applicationFrame.size.width;
NSMutableArray *Points = [[NSMutableArray alloc ] arrayWithCapacity:2];
float angle = [self radians:theta];
float side = cos(n * angle);
int cWidth = 320;
int cHeight = 240;
float width = cWidth * side * sin(angle) / 2 + cWidth /2;
float height = cHeight * side * cos(angle) / 2 + cHeight /2;
[Points addObject:[NSNumber numberWithFloat:cWidth]];
[Points addObject:[NSNumber numberWithFloat:cHeight]];
NSArray *myarr = [[[NSArray alloc] initWithArray:Points ]autorelease ];
return myarr;
}
我使用下面的代码从函数中检索数据:
NSArray *tt = [[ NSArray alloc] initWithArray:[self calcRose:3] ];
但每次编译程序时都会给我一些错误。
我该如何解决这个问题?
答案 0 :(得分:3)
[[NSMutableArray alloc ] arrayWithCapacity:2]
肯定是错的。请尝试使用[NSMutableArray arrayWithCapacity:2]
。此外,您可以使用[[self calcRose:3] retain]
而不是[[NSArray alloc] initWithArray:[self calcRose:3]]
,如果您打算将数组保持的时间超过当前的runloop传递,则只需要retain
调用。
答案 1 :(得分:1)
我猜你为了问题的目的简化了你的样本,但你似乎做了很多不必要的工作。您问题中的代码可以重写为:
-(NSArray *) calcRose : (float) theta
{
int cWidth = 320;
int cHeight = 240;
return [NSArray arrayWithObjects:[NSNumber numberWithFloat:cWidth],[NSNumber numberWithFloat:cHeight],nil];
}
initWithCapacity
并且使用可变数组除了头痛之外并没有真正给你任何东西。如果你想使用一个可变数组,只需使用[NSMutableArray array]
进行创建,但看起来你并没有添加那么多对象,所以我建议的方法会更好。
此方法返回一个自动释放的数组,因此您的调用语句可以只是
NSArray *tt = [self calcRose:3];