Objective c 为目标C中的变量分配结构
我不熟悉目标C,所以这可能是一个非常愚蠢的问题。我在读iOS编程书时发现了以下代码片段:Objective c 为目标C中的变量分配结构,objective-c,Objective C,我不熟悉目标C,所以这可能是一个非常愚蠢的问题。我在读iOS编程书时发现了以下代码片段: - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { CLLocationCoordinate2D loc = [userLocation coordinate]; // returns CLLocationCoordinate2D ... } 我还在学习目标C
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
CLLocationCoordinate2D loc = [userLocation coordinate]; // returns CLLocationCoordinate2D
...
}
我还在学习目标C,但是loc
不应该是指针吗?据我所知,您只能直接分配简单类型,如int和float。此处CLLocationCoordinate2D
是一个结构。但这不起作用:
CLLocationCoordinate2D *loc = [userLocation coordinate];
// this throws error message
// Initializing 'CLLocationCoordinate2D *' with an expression of incompatible type 'CLLocationCoordinate2D'
那么这里发生了什么,我怎样才能了解更多关于指针的知识呢。谢谢 结构不是指针
它们只是简单的C型数据结构,如int、float等。结构不是指针
它们只是简单的C型数据结构,如int、float等。这取决于
[用户位置坐标]
的返回类型。如果它返回一个结构,那么您必须将该结构存储在某个地方。在这种情况下,您将把它存储在堆栈上,一旦超出范围,它将被删除
如果它返回一个指针,那么该指针将指向存储结构的位置。请记住,结构不是对象,它们只是一个可以存储多个分组值的记录。这取决于
[userLocation coordinate]
的返回类型。如果它返回一个结构,那么您必须将该结构存储在某个地方。在这种情况下,您将把它存储在堆栈上,一旦超出范围,它将被删除
如果它返回一个指针,那么该指针将指向存储结构的位置。请记住,结构不是对象,它们只是一个可以存储多个分组值的记录。您可以分配一个scruct。Objective-C最终仍然是C 虽然内存中的对象在内部与结构没有太大区别,但不能直接指定对象,只能指定对对象的引用
因此,您需要知道[userLocation coordinate]真正返回的是什么。它可以是一个结构或指向结构或类似id的指针。因此,接收返回值的本地变量必须是同一类型 您可以指定一个scruct。Objective-C最终仍然是C 虽然内存中的对象在内部与结构没有太大区别,但不能直接指定对象,只能指定对对象的引用
因此,您需要知道[userLocation coordinate]真正返回的是什么。它可以是一个结构或指向结构或类似id的指针。因此,接收返回值的本地变量必须是同一类型 右-它返回一个结构,而不是指向结构的指针:@property(readonly,NS_NONATOMIC_IPHONEONLY)CLLocationCoordinate2D coordinateRight-它返回一个结构,而不是指向结构的指针:@property(readonly,NS_NONATOMIC_IPHONEONLY)CLLocationCoordinate2D CoordinateThat你看,我需要更好地学习C。好的,从一开始我会说不。当作为两种语言的新手使用Obj-C时,太熟悉C可能会让人困惑。另一方面,每当你发现奇怪的语法时,答案就在C层谢谢,看来我需要更好地学习C。从一开始我会说不。当作为两种语言的新手与Obj-C一起工作时,太了解C可能会让人困惑。另一方面,每当你发现奇怪的语法时,答案就在C层