Tat*_*tat 41 iphone objective-c nsarray cgpoint
我想将我的CGPoint存储到NSMutable数组中,所以,我有这样的方法:
[self.points addObject:CGPointMake(x, y)];
Run Code Online (Sandbox Code Playgroud)
但我得到了错误,它说:
"addObject"的参数1的类型不兼容.
所以,我查看了API,
- (void)addObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)
anObject要添加到接收者内容末尾的对象.该值不得为零.
所以,我认为" CGPointMake "可以创建一个Object,但它无法分配.怎么了?
kha*_*son 36
问题是CGPoint实际上只是一个C结构,它不是一个对象:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
Run Code Online (Sandbox Code Playgroud)
如果您在iPhone上,则可以使用NSValue UIKit添加项将CGPoint转换为NSValue对象.
有关示例,请参阅此前一个答案:如何以简单的方式将CGPoint对象添加到NSArray?
atb*_*r11 31
您还可以执行以下操作:
[myArray addObject:[NSValue valueWithCGPoint:MyCGPoint]];
Run Code Online (Sandbox Code Playgroud)
hoo*_*oop 11
不幸的是,CGPoint不是Objective-c对象.它是ac结构.如果Apple双击CGPoint,您应该跳转到定义
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
Run Code Online (Sandbox Code Playgroud)
如果要将CGPoint存储在NSArray中,则需要先将它们包装起来.您可以使用NSValue或编写自己的包装器.
编辑>每个objective-c方法调用都有一个小的开销,创建和销毁对象涉及许多方法调用,甚至在它们被用于任何东西之前.你不应该担心这种情况,但对于非常小的物体来说,这些物体封装的行为很少,而且寿命很短,它会影响性能.如果Apple使用对象的所有点,矩形,大小甚至整数,浮点数等表现会更差.
| 归档时间: |
|
| 查看次数: |
32072 次 |
| 最近记录: |