0

使用 CLLocationManager 编写教程,我在 init 方法中设置委托:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) 
    {
        locationManager = [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [locationManager startUpdatingLocation];
    }
    return self;
}

设置委托:

[locationManager setDelegate:self];

在另一个教程中,我在头文件中设置了委托:

@interface MyViewController : UIViewController <CLLocationManagerDelegate>

他们平等吗?有什么区别(如果有的话)?

4

2 回答 2

2

这是两件不同的事情。

CLLocationManagerDelegate是一个协议
[locationManager setDelegate:self]只需设置对象委托,因此 CLLocationManager 可以调用已实现的委托方法。要使其正常工作,self必须符合 CLLocationManagerDelegate 协议。

换句话说,你需要两者都做。

于 2012-04-20T12:40:57.173 回答
1

如果你想实现并从 CLLocationManger 的委托中获取回调,你将需要它们

您在标题中指定

@interface MyViewController : UIViewController <CLLocationManagerDelegate>

这告诉 xcode MyViewController 将实现 CLLocationManagerDelegate 方法。如果有非可选的委托方法,xcode 会提醒你去实现它们。

使用下面的行

[locationManager setDelegate:self];

您告诉您的 CLLocationManager (locationManager) 实例 MyViewController (self) 将是委托,它应该调用您已实现的所有已实现的 CLLocationManagerDelegate 方法(如果需要)

于 2012-04-20T12:49:48.090 回答