设置CLLocationManager的委托(两种不同的方式,它们是否相等?)

时间:2012-04-20 12:32:43

标签: iphone objective-c delegates cllocationmanager

使用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>

他们是平等的吗?差异是什么(如果有的话)?

2 个答案:

答案 0 :(得分:2)

这是两件不同的事情。

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

换句话说,你需要做两件事。

答案 1 :(得分:1)

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

您可以在标题

中指定
@interface MyViewController : UIViewController <CLLocationManagerDelegate>

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

下面一行

[locationManager setDelegate:self];

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