http://stackoverflow.com/questions/3535800/cllocationmanager-strange-memory-leak
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@protocol MapLocationManagerDelegate
@required
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end
@interface MapLocationManager : NSObject <CLLocationManagerDelegate>{
CLLocationManager *locationManage;
id delegate;
}
@property (nonatomic, retain) CLLocationManager *locationManage;
@property (nonatomic, assign) id delegate;
@end
/*
//调用例子
h文件
#import <UIKit/UIKit.h>
#import "CoreLocationController.h"
@interface CoreLocationDemoViewController : UIViewController <MapLocationManagerDelegate > {
MapLocationManager *CLController;
IBOutlet UILabel *locLabel;
}
@property (nonatomic, retain) MapLocationManager *CLController;
@end
m文件
- (void)viewDidLoad {
[super viewDidLoad];
CLController = [[ MapLocationManager alloc] init];
CLController.delegate = self;
[CLController.locMgr startUpdatingLocation];
}
- (void)locationUpdate:(CLLocation *)location {
locLabel.text = [location description];
}
- (void)locationError:(NSError *)error {
locLabel.text = [error description];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)dealloc {
[CLController release];
[super dealloc];
}
*/
m
#import "MapLocationManage.h"
@implementation MapLocationManager
@synthesize locationManage, delegate;
- (id) init {
self = [super init];
if(self != nil) {
self.locationManage = [[[CLLocationManager alloc] init] autorelease];
self.locationManage.delegate = self;
[self performSelector:@selector(stopUpdate) withObject:@"Timed Out" afterDelay:10.0];
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if([self.delegate conformsToProtocol:@protocol(MapLocationManagerDelegate)]) {
[self.delegate locationUpdate:newLocation];
}
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
if([self.delegate conformsToProtocol:@protocol(MapLocationManagerDelegate)]) {
[self.delegate locationError:error];
}
}
-(void)stopUpdate
{
[self.locationManage stopUpdatingLocation];
}
- (void)dealloc {
[self.locationManage release];
[super dealloc];
}
@end