MomentH
MomentH

Reputation: 2019

iOS memory issue with init in viewDidLoad and release in viewDidUnload

Are there any potential memory issues with the following code?:

- (void)viewDidLoad
{ 
    locationManager = [[CLLocationManager alloc] init];
}

- (void)viewWillAppear:(BOOL)animated {

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
}

- (void)viewDidUnload
{
    [locationManager release];
    locationManager=nil;
    [super viewDidUnload];
}

I have checked it with Instrument and it says there is memory leaking with above code.

Upvotes: 3

Views: 713

Answers (2)

Jiri
Jiri

Reputation: 2206

You should release the locationManager in the dealloc method.

- (void)dealloc
{
    [locationManager release];
    [super dealloc];
}

The reason for that is that viewDidUnload is not guaranteed to get called.

For details see these questions:

When is UIViewController viewDidUnload called?

viewdidunload is not getting called at all!

Upvotes: 5

Nekto
Nekto

Reputation: 17877

It looks quite well besides:

  1. At the beginning of viewDidLoad add [super viewDidLoad];.
  2. At the beginning of viewWillAppear: add [super viewWillAppear:animated];

Upvotes: 0

Related Questions