Утечка памяти против Зомби - iPhone - PullRequest
1 голос
/ 31 января 2012

Мое приложение на iPhone ломается из-за зомби или из-за утечки памяти. Я сузил его до 3 строк кода и могу надежно получить одну из двух вещей, комментируя / раскомментируя код. Ошибки возникают, когда при переходе между списком результатов (tableView) и страницей сведений, содержащей карту и несколько меток, происходит утечка памяти при первом переходе от карты к списку результатов, когда зомби появляется, возможно, после 5 / 6 раз переходя к разным результатам и обратно.

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

#define METERS_PER_MILE 1609.344

@interface ResDetailsPageVC : UIViewController <MKMapViewDelegate, UIAlertViewDelegate>  {

UISegmentedControl *mapTypeSwitcher;
MKMapView *mapView;      

UILabel *nameLabel;
UIButton *addressLabel;
UILabel *telephoneLabel;

NSString *address;

}

@property (nonatomic, retain) IBOutlet UISegmentedControl *mapTypeSwitcher;
@property (nonatomic, retain) IBOutlet MKMapView *mapView;

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UIButton *addressLabel;
@property (nonatomic, retain) IBOutlet UILabel *telephoneLabel;


- (IBAction)segmentedControlIndexChanged;
- (IBAction)callButtonClick;
- (IBAction)addressClick;

- (void) callNumber;

@end






@synthesize mapView;
@synthesize mapTypeSwitcher;

@synthesize nameLabel, addressLabel, telephoneLabel;

- (void)dealloc {

// if these lines are commented out - memory leak
// if not - zombie?!
/*self.telephoneLabel = nil;
self.addressLabel = nil;
self.nameLabel = nil;*/
self.mapView = nil;
self.mapTypeSwitcher = nil;

[super dealloc];

}

Ответы [ 2 ]

0 голосов
/ 31 января 2012

Я рекомендую это вам:

- (void)dealloc {
[telephoneLabel release]; telephoneLabel = nil;
[addressLabel release]; addressLabel = nil;
....

[super dealloc];
}
0 голосов
/ 31 января 2012

Где-то другой фрагмент кода использует тот же объект, адрес которого хранится в одном из этих трех свойств, но этот другой фрагмент кода неправильно сохранил объект.

...