如何通过简单的方法将CGPoint对象添加到NSArray?


129

我大约有50个CGPoint对象,它们描述了类似“路径”的内容,我想将它们添加到NSArray中。这将是一个只为给定索引返回相应的CGPoint的方法。我不想创建50个变量,例如p1 = ...; p2 = ...,依此类推。有没有一种简单的方法可以让我在初始化带有对象的NSArray时“立即”定义这些点?

Answers:


324

随着UIKitApple在CGPoint中添加了对CGPoint的支持NSValue,因此您可以执行以下操作:

NSArray *points = [NSArray arrayWithObjects:
                     [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
                     [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
                     nil];

列出与CGPoint一样多的[NSValue]实例,并以nil结束列表。此结构中的所有对象都会自动释放。

另一方面,当您从数组中拉出值时:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];

3
对于标量类型,看看NSNumber的......你会看到像numberWithBool构造函数:numberWithInteger:numberWithFloat :, numberWithUnsignedShort:等
贾勒特哈迪

4
或者,您可以直接使用NSValue:例如[NSValue valueWithBytes:&someStructSockaddr objCType:@encode(struct sockaddr)]。
吉姆·多维

7

我用这个:

创建数组:

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];

获取第一个CGPoint对象:

CGPoint myPoint = [myArray[0] CGPointValue];

3

您也可以以以下最小形式编写:

CGPoint myArray[] = { CGPointMake(5.5, 6.6), CGPointMake(7.7, 8.8) };

CGPoint p2 = myArray[1];

2

你看了CFMutableArray吗?那可能对您更好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.