开发者

iPhone SDK: Memory leak on picker

开发者 https://www.devze.com 2022-12-24 06:59 出处:网络
I have created a picker for my users to pick from a list of countries. The problem is that repeated opening and closing of the picker is resulting in “EXC_BAD_ACCESS” error. I suspect it might be a

I have created a picker for my users to pick from a list of countries. The problem is that repeated opening and closing of the picker is resulting in “EXC_BAD_ACCESS” error. I suspect it might be a memory leak but I am not sure. I was hoping someone could shed some insight into why this might be happening?

//data source for UIPicker 
NSArray *arrayCountryChoices;



arrayCountryChoices = [[NSArray alloc] initWithObjects:@"TK=TOKELAU",
                           @"TJ=TAJIKISTAN",
                           @"TH=THAILAND",
                           @"TG=TOGO",
                           @"TF=FRENCH SOUTHERN TERRITORIES",
                           @"GY=GUYANA",
                           @"TD=CHAD", nil];

//opening the picker
        CountryViewController *countryVC = [[CountryViewController alloc] initWithNibName:@"CountryView" bundle:nil];
        countryVC.delegate = self;      
        [self presentModalViewController:countryVC animated:YES];       
        [countryVC release];    

//here is where I grab the data
    //close country selector
    [self dismissModalViewControllerAnimated:YES];

    //parse out code
    NSString *strCode = [chosenCountry substringToIndex:2];

    //set the gui
    txtCountry.开发者_JS百科text = strCode;

I think it may be because I am trying to release the Country Selector before the delegate has a chance to get its data? Also I am wondring if I should not release the picker until the screen that calls it is released.

Thanks in advance.


Releasing the view after you've added it as a modal view is not a problem because it's being held in the viewController's modalViewController property. However, when you dismiss the modal view it does die so this message:

 NSString *strCode = [chosenCountry substringToIndex:2];

...has no target/receiver. You should simply move this line to the line before you dismiss the modalView so that the chosenCountry object is still alive when the message is sent.

0

精彩评论

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