Where is the memory leak in my UITableViewController?
The table view works fine however when I leave the view and come back to it the second time, I get a memory leak. Probably something in the viewDidLoad just not sure.
I am running the leaks tool and am getting the following notification:
Leaked Object # Address Size Responsible Library Responsible Frame
NSCFString 631 < multiple > 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:]
NSCFS开发者_StackOverflowtring 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:]
when i click on the first line in extended view I get:
14 CFNetwork URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*)
15 CFNetwork URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long)
16 CFNetwork URLConnectionClient::processEvents()
17 CFNetwork MultiplexerSource::perform()
Here is the code:
#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:
@"<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
"<soap:Body>"
"<GetContactsWithId xmlns=\"http://tempuri.org/\">"
"<uid>%@</uid>"
"<pwd>%@</pwd>"
"</GetContactsWithId>"
"</soap:Body>"
"</soap:Envelope>",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
I see most of your statement are ready for leak, e.g in the viewDidUnload method , you are not releasing any instance member properly.
you need to call release on the object which you either alloced, init or retain.
(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;
..................
..................
}
Would suggest you to spend some time to read Memory Management Programming Guide
You have several places where you call [[XXX alloc] init]
where XXX is a NSMutableArray
or NSMutableString
. You never release these and they are not autoreleased, thus they leak.
Please see my response here: Deallocating and removing UiButtons
It contains an explanation of when you should retain/release or rely on autorelease. Apply these rules to your code above. In short, anytime you alloc anything, you should be following it with a call to release on that object. If you don't, you'll have a memory leak.
Update:
You're not releasing the activityIndicator that you create here.
- (void)viewDidLoad {
[super viewDidLoad];
// ...
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
// ...
[self.view addSubview:activityIndicator];
}
In tableView:didSelectRowAtIndexPath:
, lastIndexPath
is not released before it retains indexPath
. In viewDidLoad
, you nil
out the variables without releasing them.
And in XML parsing, you create and release strings based on the assumption that one element doesn't contain the other. If they are nested, one element will start before the other ends. In such case, you lose the reference to the original string and thus leak. This is not much of an issue if they are siblings but by the looks of you log, the elements are nested.
I heard the
[UIImage imageNamed:@"contact.png"];
is a memory occurring line. It will create an autorelease object as the returned object. May be that can also be a problem.
精彩评论