我是Objective C的新手,所以这可能是一个非常愚蠢的问题。我正在阅读iOS编程书,并获得了这段代码:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
CLLocationCoordinate2D loc = [userLocation coordinate]; // returns CLLocationCoordinate2D
...
}
我还在学习Objective C,但不应该loc
成为指针吗?据我所知,你只能直接分配简单的类型,如int和float。这里CLLocationCoordinate2D
是一个结构。但这不起作用:
CLLocationCoordinate2D *loc = [userLocation coordinate];
// this throws error message
// Initializing 'CLLocationCoordinate2D *' with an expression of incompatible type 'CLLocationCoordinate2D'
那么这里发生了什么,我怎样才能更多地了解指针。谢谢!
答案 0 :(得分:2)
结构不是指针!
它们只是简单的C型数据结构,如int,float等。
答案 1 :(得分:1)
这取决于[userLocation coordinate]
的返回类型。如果它返回一个结构,那么你必须将该结构存储在某个地方。在这种情况下,您将它存储在堆栈中,一旦超出范围,它将被删除。
如果它返回一个指针,那么该指针将指向存储结构的位置。请记住,结构不是对象,它们只是一个可以存储组合在一起的多个值的记录。
答案 2 :(得分:1)
您可以指定一个scruct。 Objectiv-C最终仍然是C.
虽然内部对象在内存中与结构没有太大差别,但您不能直接分配对象,而是引用对象。
所以你需要知道[userLocation coordinate]真正返回的内容。它可以是结构或指向结构或id的指针。因此,接收返回值的本地变量必须属于同一类型。