First off, the disclaimer is I'm targeting iOS 5, so that very well may be the source of my issues, but if not...

I'm trying to write a simple class that manages location updates through CoreLocation. However, I see some pretty strange behavior. I have a custom class which basically wraps CLLocationManager and the delegate methods. This is the interface:

```
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@protocol CLZipCodeFetcherDelegate
@optional - (void)didReceiveZipCode:(NSString *)zipCode;
@end

@interface CLZipCodeFetcher : NSObject <CLLocationManagerDelegate> {
    id <CLZipCodeFetcherDelegate> delegate;
    CLLocationManager *locationManager;
}

@property (strong, readwrite) id <CLZipCodeFetcherDelegate> delegate;
@property (strong, read write) CLLocationManager *locationManager;

- (void)getZipCode;

@end

```

and the implementation (ignore the zip code related stuff- that's what the class is eventually meant to do, but right now I'm just trying to get some coordinates back from CoreLocation):

```
#import "CLZipCodeFetcher.h"

@implementation CLZipCodeFetcher

@synthesize delegate, locationManager;

- (id) init {
    self = [super init];
    if (self != nil) {
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        self.locationManager.distanceFilter = 10.0f; // we don't need to be any more accurate than 10m
        self.locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
        self.locationManager.purpose = @"Retrieve zip code";
    }
    return self;
}

- (void)getZipCode {
    [self.locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"Received location");
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"Location failed");
}

@end

```

And then I initialize an instance of the class in my view controller and call the method:

```
CLZipCodeFetcher *zipCodeFetcher = [[CLZipCodeFetcher alloc] init];
[zipCodeFetcher getZipCode];

```

Now, when I run this, the app takes a moment to load, and then pops up the alert dialog asking for permission to let the app use location services. However, as soon as it appears, it immediately disappears (too fast to let me hit the allow or deny button), and nothing happens (no delegate methods are called). If I then go into the Location Settings of the device, it indeed shows 'Off' for my app. When I turn it on manually from that screen and then go to try the app again, no alert dialog appears, but still nothing happens. Neither of my debug messages are logged. The behavior is the same on both the simulator and my iPhone 4.

So basically, anyone have any idea why? I've looked through all the similar threads, and many issues were related to memory management, but I don't think that'd be a problem here since ARC should be managing my CLLocationManager object, right?

P.S. Also, I did add the CoreLocation framework to my project, and I get no code errors or warnings, but is there anything else I need to do before using CoreLocation in my app?