Reutilizando a exibição no UIPickerView com o iOS 7

EDIT 12-14-2015 : Este problema é mais uma vez relatado com freqüência no iOS 7, iOS 8, iOS 9 .... Eu acho que a Apple não quer mais esse controle, e deve apenas nos proibir de usá-lo em vez de deixar um erro tão grande

Eu uso um UIPickerView com modos de exibição personalizados carregados de um Xib. Eu estava usando o método

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
    forComponent:(NSInteger)component reusingView:(UIView *)view

de UIPickerViewDelegate para reutilizar minhas visualizações.

Com o iOS 6, meu UIPickerview funciona perfeitamente e minhas visualizações são reutilizadas.

Desde o iOS 7, o reusingView é sempre nulo, então eu preciso carregar o NIB para cada linha (eu tenho 250 linhas). Minhas visões estão fazendo alguns tratamentos para que possa tomar uma pequena parte da memória, mas x250 = vazamento de memória grande.

Para ter certeza de qual é o problema, fiz um projeto simples com um UILabel:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

    UILabel *label = (UILabel *)view;
    if(view == nil) {
        label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 76)];
    }
    else {
        NSLog(@"*******************************************************");
    }
    NSLog(@"Current inndex : %i",row);
    label.text = [NSString stringWithFormat:@"TITRE %i", row];
    return label;
}

Com o iOS 6, minhas visualizações são reutilizadas corretamente:

2013-12-17 14: 27: 25.395 EssaiReusedViewPicker [261: 907] Inndex atual: 220 2013-12-17 14: 27: 25.396 EssaiReusedViewPicker [261: 907] ************** ***************************************** 2013-12-17 14:27: 25.397 EssaiReusedViewPicker [261: 907] Current inndex: 221 2013-12-17 14: 27: 25.404 EssaiReusedViewPicker [261: 907] *********************** ******************************** 2013-12-17 14: 27: 25.407 EssaiReusedViewPicker [261: 907] Inndex atual : 222 2013-12-17 14: 27: 25.409 EssaiReusedViewPicker [261: 907] ******************************** *********************** 2013-12-17 14: 27: 25.410 EssaiReusedViewPicker [261: 907] Atual entrada: 223 2013-12-17 14: 27: 25.411 EssaiReusedViewPicker [261: 907] ***************************************** ************** 2013-12-17 14: 27: 25.412 EssaiReusedViewPicker [261: 907] Atual entrada: 224 2013-12-17 14: 27: 25.414 EssaiReusedViewPicker [261: 907] ************************************************** ***** 2013-12-17 14: 27: 25.415 EssaiReusedViewPicker [261: 907] Atual em ndex: 225 2013-12-17 14: 27: 25.420 EssaiReusedViewPicker [261: 907] ******************************* ************************ 2013-12-17 14: 27: 25.424 EssaiReusedViewPicker [261: 907] Atual entrada: 227 2013-12-17 14 : 27: 25.425 EssaiReusedViewPicker [261: 907]

Mas com o iOS 7, é uma história totalmente nova ...:

2013-12-17 14:36:09.555 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.561 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.564 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.566 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:14.172 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.350 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.351 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:14.367 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.667 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.668 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.700 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:15.083 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.400 EssaiReusedViewPicker[7209:70b] Current inndex : 7
2013-12-17 14:36:16.416 EssaiReusedViewPicker[7209:70b] Current inndex : 7

Então, oque há de errado? iOS ou ...?

questionAnswers(1)

yourAnswerToTheQuestion