In my one of the app i am getting memory leak in UIKit,UIFoundation and QuartzCore. When i go for call tree it showing leak in main.m
. I really didn't have any clue why is this happening. You can see the screen shots of the memory leak below.
In Call Tree
How to resolve this leaks?
MEMORY LEAK CODE
- (void) showCustomPrices
{
int priceValue = 0;
NSArray* priceSplitValue = [btnpriceButton.titleLabel.text componentsSeparatedByString: @"."];
NSString* priceFinal = [priceSplitValue objectAtIndex:0];
for(int i=0;i<[priceArray count];i++)
{
if([[priceArray objectAtIndex:i] isEqualToString:priceFinal]){
priceValue = i;
}
}
//Assign the cocktail to picker view
priceActionsheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];//as we want to display a subview we won't be using the default buttons but rather we're need to create a toolbar to display the buttons on
[priceActionsheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
pricePickerview = [[UIPickerView alloc] initWithFrame:pickerFrame];
pricePickerview.showsSelectionIndicator = YES;
pricePickerview.dataSource = self;
pricePickerview.delegate = self;
[priceActionsheet addSubview:pricePickerview];
//[pickerView release];
priceToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 485, 44)];
priceToolbar.barStyle = UIBarStyleBlackTranslucent;
[priceToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[barItems addObject:doneBtn];
UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
[barItems addObject:cancelBtn];
[pricePickerview selectRow:priceValue inComponent:0 animated:YES];//Memory leaks shows 100% here
[priceToolbar setItems:barItems animated:YES];
[priceActionsheet addSubview:priceToolbar];
[priceActionsheet addSubview:pricePickerview];
[priceActionsheet showInView:self.view];
[priceActionsheet setBounds:CGRectMake(0, 0, 485, 320)];
}
Any help is much appreciated.
Finally i solved my problem by moving the picker view
allocation/initialisation
part from the methodshowCustomePrices
toviewwillAppear
. Which works awesome without any memory leaks.What is happened before is whenever i click the button it popups the
pickerview
with memory allocation. Thats why the memory leak is happened.Now after moving in to
viewwillAppear
it just allocating on first time when the view gets loaded. Then Picker View is accessed without any memory allocation. So memory leaks is removed.try this in your main.m
If your project is non-ARC, it may be because you have left
[super dealloc];
somewhere subclassing foundation classes. I had the same issue with a subclass ofNSObject
. I had forgot to write[super dealloc];
and was getting some what similar leaks.