0

我是 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'

那么这里发生了什么,我怎样才能更多地了解指针。谢谢!

4

3 回答 3

2

结构不是指针!

它们只是简单的 C 类型数据结构,如 int、float 等。

于 2013-04-08T11:49:23.967 回答
1

这取决于返回类型[userLocation coordinate]是什么。如果它返回一个结构,那么您必须将该结构存储在某个地方。在这种情况下,您会将其存储在堆栈中,一旦超出范围,它将被删除。

如果它返回一个指针,那么该指针将指向存储结构的位置。请记住,结构不是对象,它们只是可以存储组合在一起的多个值的记录。

于 2013-04-08T11:50:01.310 回答
1

您可以分配一个结构。Objective-C 最终还是 C。

虽然内存中的对象在内部与结构并没有太大区别,但您不能直接分配对象,而是对对象的引用。

因此,您需要了解 [userLocation coordinate] 真正返回的内容。它可以是结构或指向结构或 id 的指针。因此,接收返回值的本地变量必须是同一类型。

于 2013-04-08T11:51:31.297 回答