问题
I was getting this memory leak:
[UIPickerTableViewTitleCell initWithStyle:resuableIdentifier];
and
NSConcentrateMutableAttributedString.
Issue was that I had not implemented this delegate. After implementing this now memory leaks goes away. May be this information helpful for other as I spend mine 16 hours only to figure out this issue.
// Do something with the selected row.
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
// Get the text of the row.
NSString *rowItem = [NSString stringWithFormat:@" %@",[machineData objectAtIndex:row]];
// Create and init a new UILabel.
// We must set our label's width equal to our picker's width.
// We'll give the default height in each row.
UILabel *lblRow = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView bounds].size.width, 44.0f)];
// Make the text color red.
[lblRow setTextColor: [UIColor blackColor]];
[lblRow setFont:[UIFont boldSystemFontOfSize:20]];
// Center the text.
[lblRow setTextAlignment:UITextAlignmentLeft];
// Add the text.
[lblRow setText:rowItem];
// Clear the background color to avoid problems with the display.
[lblRow setBackgroundColor:[UIColor clearColor]];
// Return the label.
return lblRow;
}
回答1:
Thanks for your info. Was confused by this leak. Only few comments:
probably lblRow should be autoreleased:
return [lblRow autorelease];
[pickerView rowSizeForComponent:component]
can be used to get size for new label.
回答2:
I used IUIPicker in a popover and every time I dismissed the popover I had memory leak. I am also using ARC, so the easiest way I resolved this was by setting the UIPickerView = nil on unload. The following appears to have done the trick.
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.pickerView = nil;
}
来源:https://stackoverflow.com/questions/13045423/ios6-uipickerview-memory-leak-issue