使用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>
他们是平等的吗?差异是什么(如果有的话)?
答案 0 :(得分:2)
这是两件不同的事情。
CLLocationManagerDelegate是protocol。
[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方法(如果需要)