开发者

Where is the memory leak in my UITableViewController?

开发者 https://www.devze.com 2023-03-11 14:20 出处:网络
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.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消