Предупреждение об утечке памяти в анализаторе Stactic для UISwitch - PullRequest
0 голосов
/ 01 октября 2011

У меня есть следующий код, где каждый объект является свойством UISwitch IBOutlet.Я не уверен, почему я получаю предупреждение об утечке памяти для каждой строки при использовании xcode analyzer.

- (IBAction)copyEntirePreviousNoteButtonClicked:(id)sender
{
    self.myUISwitch1.on = TRUE;
    self.myUISwitch2.on = TRUE;
}

- (IBAction)updateButtonClicked:(id)sender
{
    NSMutableDictionary *copyOptions = [[[NSMutableDictionary alloc] init] autorelease];

    if (self.myUISwitch1.on) {
        [copyOptions setValue:@"ON" forKey:@"myUISwitch1"];
    }

    if (self.myUISwitch2.on) {
        [copyOptions setValue:@"ON" forKey:@"myUISwitch2"];
    }
}

Обновление с полным кодом:

@property (nonatomic, retain) IBOutlet UISwitch *copy_hp_cchpi;
@property (nonatomic, retain) IBOutlet UISwitch *copy_hp_history;

- (IBAction)copyEntirePreviousNoteButtonClicked:(id)sender
{
    self.copy_hp_cchpi.on = YES;
    self.copy_hp_history.on = TRUE;
}

- (IBAction)updateButtonClicked:(id)sender
{
    NSMutableDictionary *copyOptions = [[[NSMutableDictionary alloc] init] autorelease];

    if (self.copy_hp_cchpi.on) {
        [copyOptions setValue:@"ON" forKey:@"copy_hp_cc_history_present_illness"];
    }

    if (self.copy_hp_history.on) {
        [copyOptions setValue:@"ON" forKey:@"copy_hp_med_fam_social_history"];
    }

    int rcode = [MyAPIDataSource copyPreviewAppointmentClinicalInfo:[MyAPIDataSource getCurrentAppointmentId] copyOptions:copyOptions];

    if (rcode) 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to copy last appointment information.  Please try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];        
    } 
    else 
    {
        //Send Notifications to other screens that clinical info was copied from last appointment to current one.
        [[NSNotificationCenter defaultCenter] postNotificationName:@"LastAppointmentLoadedHandler" object:self];

        [self dismissModalViewControllerAnimated:YES];
    }
}

1 Ответ

2 голосов
/ 01 октября 2011

После большого количества царапин на голове ...

По соглашению ожидается, что любой метод Objective C, содержащий слово "copy", вернет сохраненный объект. То же самое относится к префиксам методов 'init' и 'new'.

Статический анализатор знает об этом соглашении и жалуется, что ваш метод copyEntirePreviousNoteButtonClicked не возвращает сохраненный объект.

Решение состоит в том, чтобы не называть ваши методы, содержащие слово «копия», если вы действительно не имеете это в виду. Придерживайтесь соглашений об именовании метода Objective C. Измените название вашего метода, и проблема исчезнет.

...