سؤال

لقد كنت أعمل على إخراج تسرب الذاكرة في برنامجي وأنا لأسفل إلى عدد قليل من النماذج. الشيء الغريب هو أنهم يأتون من عندما أستخدم CoreLocation للحصول على موقع GPS. يعود الرمز بشكل صحيح الموقع، لكنه يتسرب في جميع أنحاء المكان: CFHTTPMessage، CFURLConnectage، CFurlConnection، cfurlrequest، cfurlresponse، generlblock-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
هل كانت مفيدة؟

المحلول

تحتاج إلى الافراج عن الموقع. تأكد من تعيين مندوبها إلى NULL قبل الإفراج. وأيضا، ليست فكرة جيدة فقط إرجاع النتيجة الأولى. تأكد من أن الدقة الأفقية ليست <0 وتكون أيضا أقل من بعض العتبة، مثل 5000 متر. ولجعلها أكثر قوة، قد ترغب في إضافة مؤقت لجعلها تتوقف بعد وقت معين، إذا لم تتمكن من العثور على موقعك بدقة بما فيه الكفاية.

نصائح أخرى

أنت لا تصدر أبدا locationController

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top