我正在研究代码以获取用户的位置并陷入困境

时间:2011-10-13 05:52:55

标签: iphone objective-c ios core-location

首先请看下面的代码

CoreLocationController.h
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@protocol CoreLocationControllerDelegate     // Line 1
@required                       

- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;

@end

/* Declare class named CoreLocationControll and inherited from CLLocationManagerDelegate */
@interface CoreLocationController : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *locMgr;
    id delegate;
}

@property (nonatomic, retain) CLLocationManager *locMgr;            // claim setter and getter for locMgr
@property (nonatomic, assign) id delegate;                          // claim setter and getter for delegate

@end


CoreLcationController.m
#import "CoreLocationController.h"

@implementation CoreLocationController
@synthesize locMgr, delegate;

/* Is triggered by - (void)startUpdatingLocation from CoreLocationDemoViewController.m*/
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"CORE_LOCATION_CONTROLLER=======>DID_UPDATE_TO_LOCATION");
    if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) // line 2
        [self.delegate locationUpdate:newLocation];

}

我的问题是第1行和第2行的作用以及原因 我查了一下CoreLocationControllerDelegate但没有参考

1 个答案:

答案 0 :(得分:0)

您询问的行是objective-c协议声明。该代码声明了一个名为CoreLocationControllerDelegate的协议。简单来说,协议是一个方法列表,如果符合协议,则可以期望给定对象实现。

例如,UITextFieldDelegate协议包含对象应该或必须实现的各种方法,如果它想要成为文本字段的委托。

第1行@required表示对象必须实现以下方法才能符合协议。如果您将对象声明为符合协议,则必须实现这些方法,否则您将遇到构建错误(或警告,我不记得哪些)。

第2行是一个安全检查,用于确保委托在调用委托方法之前符合协议(在这种情况下,它实现了所需的方法)。这可以防止将无法识别的选择器发送到对象的运行时崩溃。