views:

1126

answers:

2

I want to store my CGPoint to the NSMultable Array, so , I have method like this:

[self.points addObject:CGPointMake(x, y)];

But I got the error, it said that :

Incompatible type for argument 1 of "addObject".

So, I check out the API,

(void)addObject:(id)anObject

anObject The object to add to the end of the receiver's content. This value must not be nil.

So, I think the "CGPointMake" can make a Object, but it can't be assigned. What happens?

+2  A: 

Unfortunately for you a CGPoint isn't an Objective-c object. It is a c struct. if you Apple double click on CGPoint you should jump to the definition

struct CGPoint {
    CGFloat x;
    CGFloat y;
};
typedef struct CGPoint CGPoint;

If you want to store CGPoint in an NSArray you will need to wrap them first. You can use NSValue for this or write your own wrapper.

see http://stackoverflow.com/questions/772958/converting-a-cgpoint-to-nsvalue

EDIT> There is a small overhead for each objective-c method call, and creating and destroying objects involves many method calls before they are even used for anything. You shouldn't worry about this normally but for very small objects which encapsulate little behaviour and that have short lifetimes it can affect performance. If Apple used objects for all points, rect, sizes and even ints, floats, etc performance would be worse.

mustISignUp
+3  A: 

The problem is that CGPoint is actually just a C structure it is not an object:

struct CGPoint {
   CGFloat x;
   CGFloat y;
};
typedef struct CGPoint CGPoint;

If you are on the iPhone you can use the NSValue UIKit additions to convert the CGPoint to an NSValue object.

See this previous answer for examples: http://stackoverflow.com/questions/899600/how-can-i-add-cgpoint-objects-to-an-nsarray-the-easy-way

kharrison