Где утечка памяти в моем UITableViewController? - PullRequest
0 голосов
/ 08 июня 2011

Представление таблицы работает нормально, однако, когда я покидаю представление и возвращаюсь к нему во второй раз, я получаю утечку памяти. Вероятно, что-то в viewDidLoad просто не уверен.

Я запускаю инструмент утечки и получаю следующее уведомление:

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:]
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<XClientEvent, XClientEventParams>*, 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:
                           @"<?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

Ответы [ 5 ]

1 голос
/ 08 июня 2011

Я вижу, что большая часть вашего оператора готова к утечке, например, в методе viewDidUnload вы не освобождаете ни одного члена экземпляра должным образом.

вам нужно вызвать release для объекта, который вы либо выделили, init илисохранить.

 (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;
     ..................
    ..................

}

Советую потратить некоторое время на чтение Руководства по программированию управления памятью

1 голос
/ 08 июня 2011

Пожалуйста, смотрите мой ответ здесь: Удаление и удаление UiButtons

В нем содержится объяснение того, когда вам следует сохранять / отпускать или полагаться на авто-выпуск.Примените эти правила к вашему коду выше.Короче говоря, в любое время, когда вы выделяете что-либо, вы должны следовать за этим с помощью вызова release для этого объекта.Если этого не произойдет, у вас будет утечка памяти.

Обновление:

Вы не выпускаете созданный здесь ActivityIndicator.

- (void)viewDidLoad {
    [super viewDidLoad];

    // ...

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    // ...
    [self.view addSubview:activityIndicator];
}
1 голос
/ 08 июня 2011

У вас есть несколько мест, где вы звоните [[XXX alloc] init], где XXX это NSMutableArray или NSMutableString.Вы никогда не выпускаете их, и они не освобождаются автоматически, поэтому они просачиваются.

0 голосов
/ 08 июня 2011

В tableView:didSelectRowAtIndexPath:, lastIndexPath не освобождается до сохранения indexPathviewDidLoad вы nil исключаете переменные.

И при разборе XML вы создаете и освобождаете строки, исходя из предположения, что один элемент не содержит другой.Если они вложенные, один элемент запустится раньше, чем закончится другой.В таком случае вы потеряете ссылку на исходную строку и, следовательно, утечка.Это не большая проблема, если они братья и сестры, но, судя по вашему журналу, элементы вложены.

0 голосов
/ 08 июня 2011

Я слышал

[UIImage imageNamed: @ "contact.png"];

- строка памяти. Это создаст объект автоматического выпуска как возвращенный объект. Может быть, это тоже может быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...