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朋友定位应用

如何在 iPhone 模拟器中禁用 coreLocation?

为啥不用“import CoreLocation”就可以访问 iPhone 的位置?

iPhone 通过 Internet 传输 CoreLocation

在单独的线程上进行 iPhone CoreLocation 调用的最佳方法?

使用 AssetLibrary 从 iPhone 获取最后 10 张照片,iOS 6.1.3 上的 Corelocation 弃用问题