将结构分配给Objective C中的变量

时间:2013-04-08 11:45:56

标签: objective-c

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

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

3 个答案:

答案 0 :(得分:2)

结构不是指针!

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您可以指定一个scruct。 Objectiv-C最终仍然是C.

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

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