iPhone 帮助:CoreLocation 框架中的奇怪内存泄漏
Posted
技术标签:
【中文标题】iPhone 帮助:CoreLocation 框架中的奇怪内存泄漏【英文标题】:iPhone Help: Odd Memory Leak In CoreLocation Framework 【发布时间】:2009-08-24 04:33:59 【问题描述】:我一直在努力解决我的程序中的内存泄漏问题,但我遇到了一些落后者。奇怪的是,当我使用 CoreLocation 获取 gps 位置时,它们来自。代码正确地返回了位置,但它到处泄漏:CFHTTPMessage、CFURLConnection、CFURLRequest、CFURLResponse、GeneralBlock-16、-32、-48、HTTPRequest 等......谁能指导我如何解决这个问题?
MyCLController 的初始化
locationController = [[MyCLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];
做一些事情并通过委托回电:
[locationController release];
MyCLController.h:
#import <Foundation/Foundation.h>
@protocol MyCLControllerDelegate
@required
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end
@interface MyCLController : NSObject
CLLocationManager *locationManager;
id delegate;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign) id delegate;
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation;
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error;
@end
MyCLController.m:
#import "MyCLController.h"
@implementation MyCLController
@synthesize locationManager;
@synthesize delegate;
- (id) init
self = [super init];
if (self != nil)
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self; // send loc updates to myself
return self;
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
[locationManager stopUpdatingLocation];
[self.delegate locationUpdate:newLocation];
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
[self.delegate locationError:error];
- (void)dealloc
[super dealloc];
@end
【问题讨论】:
【参考方案1】:您需要释放 LocationManager。确保在发布之前将其委托设置为 NULL。而且,只返回第一个结果也不是一个好主意。确保水平精度不
【讨论】:
【参考方案2】:你永远不会释放locationController
【讨论】:
感谢您的回答,但这实际上不是泄漏的来源,我忘记发布我的 dealloc 方法。泄漏正是在我调用 startUpdatingLocation 时发生的。 [locationController 发布];以上是关于iPhone 帮助:CoreLocation 框架中的奇怪内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iPhone 模拟器中禁用 coreLocation?
为啥不用“import CoreLocation”就可以访问 iPhone 的位置?
iPhone 通过 Internet 传输 CoreLocation
在单独的线程上进行 iPhone CoreLocation 调用的最佳方法?
使用 AssetLibrary 从 iPhone 获取最后 10 张照片,iOS 6.1.3 上的 Corelocation 弃用问题