我的UITableViewController中的内存泄漏在哪里?
表视图工作正常但是当我离开视图并第二次回到它时,我得到了内存泄漏。 可能viewDidLoad中的某些内容并不确定。
我正在运行泄漏工具,并收到以下通知:
Leaked Object # Address Size Responsible Library Responsible Frame NSCFString 631 20192 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339c80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339af0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339960 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83397d0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339640 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83394b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339320 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339190 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8339000 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338e70 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338ce0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338b50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83389c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338830 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83386a0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338510 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338380 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83381f0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8338060 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337ed0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337d40 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337bb0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337a20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83378b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337720 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337590 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337400 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8337270 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83370b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336f40 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336dd0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336c50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336ae0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336960 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83367e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336660 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83364f0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336360 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83361e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8336070 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335ee0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335d60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335be0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335a60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83358f0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335760 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335470 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8335180 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334e80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334d10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334b90 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334a10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334890 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83344a0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334310 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8334180 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333e10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333c80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333af0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333970 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333800 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8333670 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8323220 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8320160 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x831eef0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x831e5e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x831d710 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8312e80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83119c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x830e1c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x83055c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031900 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031770 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031470 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031300 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031190 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8031010 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8030ea0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8030d20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8030ba0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8030a20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x80308b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8030720 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x80305a0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x80302a0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802ffa0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802fe80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802fb90 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802fa20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802f8b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802f730 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802f5c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802f2d0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802ef10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802ed80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802ebd0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802ea50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802e8e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802cbe0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802cb40 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c9c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c840 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c6d0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c560 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c3e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c270 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802c100 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802bf90 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802bdf0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802bdd0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802bc60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802bb90 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802b9e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x802b870 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8028080 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x8027fe0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6f5e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6f450 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6f150 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6efd0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ee50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ece0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6eb60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e9e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e870 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e700 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e580 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e400 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e280 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6e100 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6df80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6de00 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6dc80 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6db10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d930 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d7c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d640 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d420 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d3b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d220 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6d090 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6cf00 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6cd70 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6cbe0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ca50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c8c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c730 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c5a0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c410 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c280 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6c0f0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6bf60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6be10 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6bca0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6bb30 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b9c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b850 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b6e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b550 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b3c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b230 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6b0c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6af50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ae00 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ac90 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6ab20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a9d0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a880 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a6f0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a560 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a3e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a260 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e6a0e0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69f50 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69de0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69c60 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69af0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69980 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69800 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69680 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69500 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69380 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69200 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e69090 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68f20 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68da0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68c30 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68ab0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68930 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e687b0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68640 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e684c0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68340 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e681d0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e68040 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e67ec0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e67d40 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e67bc0 32 Foundation -[NSCFString copyWithZone:] NSCFString 0x4e67a50 32 Foundation -[NSCFString copyWithZone:]
当我点击扩展视图中的第一行时,我得到:
14 CFNetwork URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) 15 CFNetwork URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo*, long) 16 CFNetwork URLConnectionClient::processEvents() 17 CFNetwork MultiplexerSource::perform()
这是代码:
#import "AddRemoteRecipientsTableViewController.h" #import "MyManager.h" #import "FaxRecipient.h" @implementation AddRemoteRecipientsTableViewController @synthesize lastIndexPath; @synthesize delegate=_delegate; @synthesize faxRecipient; /* -(IBAction) btnSave{ } -(IBAction) btnDone{ } */ -(void) loadRemoteRecipients{ activityIndicator.startAnimating; [remoteRecipientItems removeAllObjects]; [[self tableView] reloadData]; NSString * uName=[[NSUserDefaults standardUserDefaults]objectForKey:@"userNameKey"]; NSString * pWord = [[NSUserDefaults standardUserDefaults]objectForKey:@"passwordKey"]; NSURL *url = [NSURL URLWithString: @"https://someurl"]; NSString *xmlString = [NSString stringWithFormat: @"" "" "" "" "%@" "%@" "" "" "",uName,pWord ]; NSData *data = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //---set the headers--- NSString *msgLength = [NSString stringWithFormat:@"%d", [xmlString length]]; [request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"http://someurl" forHTTPHeaderField:@"SOAPAction"]; [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; //---set the HTTP method and body--- [request setHTTPMethod:@"POST"]; [request setHTTPBody: data]; if (connectionInprogress) { [connectionInprogress cancel]; [connectionInprogress release]; } //instantiate object to hold incoming data [xmlData release]; xmlData = [[NSMutableData alloc]init]; connectionInprogress = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [xmlData appendData:data]; } - (void) connectionDidFinishLoading:(NSURLConnection *)connection{ NSXMLParser *parser = [[NSXMLParser alloc]initWithData:xmlData]; [parser setDelegate:self]; [parser parse]; [parser release]; [[self tableView] reloadData]; activityIndicator.stopAnimating; [connectionInprogress release]; connectionInprogress = nil; [xmlData release]; xmlData = nil; } #pragma mark - #pragma Parser Methods -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *) elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqual:@"ContactId"]) { faxRecipient =[[FaxRecipient alloc]init]; remoteRecipientString = [[NSMutableString alloc]init]; } else if ([elementName isEqual:@"Name"]) { remoteRecipientString = [[NSMutableString alloc]init]; }else if ([elementName isEqual:@"Fax"]) { remoteRecipientString = [[NSMutableString alloc]init]; } else if ([elementName isEqual:@"Company"]) { remoteRecipientString = [[NSMutableString alloc]init]; } } -(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ [remoteRecipientString appendString:string]; } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *) elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqual:@"ContactId"]) { faxRecipient.contactID = remoteRecipientString; [remoteRecipientString release]; remoteRecipientString = nil; } if ([elementName isEqual:@"Name"]) { faxRecipient.name = remoteRecipientString; [remoteRecipientString release]; remoteRecipientString = nil; } if ([elementName isEqual:@"Fax"]) { faxRecipient.fax = remoteRecipientString; [remoteRecipientString release]; remoteRecipientString = nil; } if ([elementName isEqual:@"Company"]) { faxRecipient.company = remoteRecipientString; [remoteRecipientItems addObject:faxRecipient]; [faxRecipient release]; faxRecipient = nil; [remoteRecipientString release]; remoteRecipientString = nil; } } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ [connectionInprogress release]; connectionInprogress = nil; [xmlData release]; xmlData = nil; NSString *errorString = [NSString stringWithFormat:@"Remote Recipient Fetch Failed %@",[error localizedDescription]]; UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:errorString delegate:nil cancelButtonTitle:@"OK" destructiveButtonTitle:nil otherButtonTitles:nil]; [actionSheet showInView:[[self view]window]]; [actionSheet autorelease]; } #pragma mark - #pragma mark Initialization /* - (id)initWithStyle:(UITableViewStyle)style { // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. self = [super initWithStyle:style]; if (self) { // Custom initialization. } return self; } */ #pragma mark - #pragma mark View lifecycle - (void)viewDidLoad { [super viewDidLoad]; remoteRecipientItems = [[NSMutableArray alloc]init]; remoteRecipientID = [[NSMutableArray alloc]init]; // add activity indicator activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; activityIndicator.center = CGPointMake(self.view.bounds.size.width / 2.0f, self.view.bounds.size.height / 2.0f); activityIndicator.hidesWhenStopped = YES; [self.view addSubview:activityIndicator]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self loadRemoteRecipients]; /* self.navigationController.toolbarHidden=NO; UIBarButtonItem *saveItem; UIBarButtonItem *doneItem; saveItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Save" style: UIBarButtonItemStyleBordered target: self action: @selector( btnSave ) ]; doneItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Done" style: UIBarButtonItemStyleBordered target: self action: @selector( btnDone ) ]; self.toolbarItems = nil ; self.toolbarItems = [ NSArray arrayWithObjects: saveItem,doneItem,nil ]; [saveItem release]; [doneItem release]; */ } /* - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } */ - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; /* self.navigationController.toolbarHidden=YES; */ } /* - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } */ /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [remoteRecipientItems count]; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"RemoteRecipientItem"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } NSUInteger row = [indexPath row]; NSUInteger oldRow = [lastIndexPath row]; // Configure the cell... FaxRecipient *faxObject= [remoteRecipientItems objectAtIndex:indexPath.row]; [[cell textLabel]setText:faxObject.name]; cell.accessoryType = (row == oldRow && lastIndexPath !=nil)? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; cell.imageView.image = [UIImage imageNamed:@"contact.png"]; return cell; } #pragma mark - #pragma mark Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { int newRow = [indexPath row]; int oldRow = (lastIndexPath !=nil)?[lastIndexPath row]:-1; if (newRow != oldRow) { UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; newCell.accessoryType = UITableViewCellAccessoryCheckmark; UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath]; oldCell.accessoryType = UITableViewCellAccessoryNone; // lastIndexPath = indexPath; lastIndexPath = [indexPath retain]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; FaxRecipient *faxObject= [remoteRecipientItems objectAtIndex:[indexPath row]]; [self.delegate getRemoteRecipient:faxObject]; [self.navigationController popViewControllerAnimated:YES]; } #pragma mark - #pragma mark Memory management - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Relinquish ownership any cached data, images, etc. that aren't in use. } - (void)viewDidUnload { // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. // For example: self.myOutlet = nil; remoteRecipientItems = nil; remoteRecipientID = nil; lastIndexPath = nil; faxRecipient = nil; } - (void)dealloc { [remoteRecipientItems release]; [remoteRecipientID release]; [lastIndexPath release]; [faxRecipient release]; [super dealloc]; } @end
我看到你的大部分语句已准备好泄漏,例如在viewDidUnload方法中,你没有正确释放任何实例成员。
你需要在你分配,初始化或保留的对象上调用release。
(void)viewDidUnload { // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. // For example: self.myOutlet = nil; [remoteRecipientItems release]; remoteRecipientItems = nil; [remoteRecipientID release]; remoteRecipientID = nil; .................. .................. }
建议你花一些时间阅读内存管理编程指南
您有几个地方调用[[XXX alloc] init]
,其中XXX是NSMutableArray
或NSMutableString
。 你永远不会释放它们,它们不是自动释放的,因此它们会泄漏。
请在此处查看我的回复: 取消分配和删除UiButtons
它包含了何时应保留/释放或依赖自动释放的说明。 将这些规则应用于上面的代码。 简而言之,任何时候你分配任何东西,你应该通过调用该对象的释放来跟随它。 如果你不这样做,你就会有内存泄漏。
更新:
您没有发布您在此处创建的activityIndicator。
- (void)viewDidLoad { [super viewDidLoad]; // ... activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; // ... [self.view addSubview:activityIndicator]; }
在tableView:didSelectRowAtIndexPath:
, lastIndexPath
在保留indexPath
之前不会被释放。 在viewDidLoad
,您可以在不释放变量的情况下将变量弄清楚。
在XML解析中,您可以基于一个元素不包含另一个元素的假设来创建和释放字符串。 如果它们是嵌套的,则一个元素将在另一个元素结束之前启动。 在这种情况下,您将丢失对原始字符串的引用,从而泄漏。 如果他们是兄弟姐妹,这不是什么大问题,但是根据你记录的外观,这些元素是嵌套的。
我听到了
[UIImage imageNamed:@“contact.png”];
是一个记忆发生线。 它将创建一个autorelease对象作为返回的对象。 可能是这也可能是个问题。