【问题标题】:Where is the memory leak in my UITableViewController?我的 UITableViewController 中的内存泄漏在哪里?
【发布时间】:2011-09-10 13:30:56
【问题描述】:

表格视图工作正常,但是当我离开视图并第二次返回时,我得到了内存泄漏。 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

【问题讨论】:

  • 为了将来参考,如果两个发帖者发布了相同的答案,最好将复选标记给第一个这样做的人。

标签: iphone ios memory-management


【解决方案1】:

您可以在多个地方调用[[XXX alloc] init],其中XXX 是NSMutableArrayNSMutableString。你永远不会释放它们,它们不会自动释放,因此它们会泄漏。

【讨论】:

  • 它们在 viewdidUnload 中发布。你看到什么具体的了吗?
  • 是的。解析器方法中的所有内容。您的 viewDidUnload 没有按照您的想法执行。我会阅读 Apple 的内存指南
【解决方案2】:

请在此处查看我的回复:Deallocating and removing UiButtons

它包含有关何时应保留/释放或依赖自动释放的说明。将这些规则应用于上面的代码。简而言之,无论何时您 alloc 任何东西,您都应该在该对象上调用 release 来跟踪它。如果不这样做,就会发生内存泄漏。

更新:

您没有释放您在此处创建的 activityIndi​​cator。

- (void)viewDidLoad {
    [super viewDidLoad];

    // ...

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    // ...
    [self.view addSubview:activityIndicator];
}

【讨论】:

  • 我已经知道了。你在哪里看到我没有发布一些东西?
  • 更新了一个帖子。
【解决方案3】:

我听到了

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

是内存发生行。它将创建一个自动释放对象作为返回的对象。可能这也可能是一个问题。

【讨论】:

  • 如果是autorelease那我们就不用担心了吧?
  • 如果这是一个自动释放并且在 cellFOrRowAtIndex 内,它可以被多次调用(与存在的行一样多)。所以它会在我们滚动或重新加载表格时增加内存消耗。
【解决方案4】:

tableView:didSelectRowAtIndexPath:中,lastIndexPath在保留indexPath之前不会被释放。在viewDidLoad 中,您nil 取出变量而不释放它们。

在 XML 解析中,您基于一个元素不包含另一个元素的假设来创建和释放字符串。如果它们是嵌套的,则一个元素将在另一个元素之前开始。在这种情况下,您会丢失对原始字符串的引用,从而泄漏。如果它们是兄弟姐妹,这不是什么大问题,但从您的日志看,这些元素是嵌套的。

【讨论】:

    【解决方案5】:

    我看到您的大部分语句都已准备好泄漏,例如在 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;
         ..................
        ..................
    
    }
    

    建议你花点时间阅读Memory Management Programming Guide

    【讨论】:

    • 谢谢。我意识到自己的错误。
    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多