【发布时间】:2011-05-10 21:35:15
【问题描述】:
您好,我在 iPhone 上玩弄地点,从一开始我就遇到了问题。我已经定位了我的问题并确定是 CLLocationManager 困扰着我。
所以我开发了非常简单的应用程序。我只有一个带有CLLocationManager 的视图控制器。在视图确实加载我初始化CLLocationManager 并开始更新。我还实现了两种方法didFailWithError 和didUpdateToLocation。
我已经阅读了很多问题,我学到的就是这个。您必须在初始化期间保留CLLocationManager。在卸载view 期间将CLLocationManagers delegate 设置为nil 也是明智之举(这与传递给CLLocationManager 的消息有关,因为框架会保留它并且它永远不会正确释放)
总而言之,我只是找不到关于该做什么以及如何使其发挥作用的体面解释。
这是我的代码,如果有人能弄清楚,我将不胜感激。
viewControllers头文件
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface CoreLocationViewController : UIViewController <CLLocationManagerDelegate>
{
CLLocationManager *locManager;
}
@property (nonatomic, retain) CLLocationManager *locManager;
@end
viewController .m 文件
#import "CoreLocationViewController.h"
@implementation CoreLocationViewController
@synthesize locManager;
- (void)viewDidLoad
{
[super viewDidLoad];
self.locManager = [[CLLocationManager alloc] init];
locManager.delegate = self;
[self.locManager startUpdatingLocation];
self.view.backgroundColor = [UIColor grayColor];
}
#pragma mark -
#pragma mark Location Delegate
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"in fail with error");
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"in update to location");
}
#pragma mark -
#pragma mark Memory Management
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload
{
self.locManager.delegate = nil;
[super viewDidUnload];
}
- (void)dealloc
{
[locManager release];
[super dealloc];
}
@end
顺便说一句:我使用的是 iOS 4.2。我指出这一点是因为我读到 Apple 在 iOS 4 中更改了位置代表
【问题讨论】:
-
你在这里泄漏,因为 self.locManager = [[CLLocationManager alloc] init];将对象保留在使用 alloc init 获得的引用计数之上。
标签: iphone objective-c ios ios4 cllocationmanager