Domanda

Questo è il codice del mio cellForRowAtIndexPath del mio UITableView

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *identificadorNormal = @"Normal";

        UITableViewCell *cell;

        cell = [tableView dequeueReusableCellWithIdentifier:identificadorNormal];

        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                               reuseIdentifier:identificadorNormal] autorelease];

            UILabel * myText = [[[UILabel alloc] initWithFrame:CGRectMake(5.0, 54.0, 225, 18)] autorelease];
            [myText setTextAlignment:UITextAlignmentLeft];
            [myText setBackgroundColor:[UIColor whiteColor ]];
            [myText setClipsToBounds:YES];
            [myText setFont:[UIFont systemFontOfSize:14.0]];
            [myText setTextColor:[UIColor blackColor]];
            [myText setAlpha:0.6];
            [myText setTag: 1];
            [cell addSubview:myText];

            UILabel * labelFRE = [[[UILabel alloc] initWithFrame:CGRectMake(235.0, 54.0, 80, 18)] autorelease];
            [labelFRE setTextAlignment:UITextAlignmentCenter];
            [labelFRE setBackgroundColor:[UIColor greenColor ]];
            [labelFRE setClipsToBounds:YES];
            [labelFRE setFont:[UIFont boldSystemFontOfSize:14.0]];
            [labelFRE setTextColor:[UIColor blackColor]];
            [labelFRE setAlpha:0.75];
            [labelFRE setTag: 2];
            [cell addSubview:labelFRE];
        }

        cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] 
            pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]];     
        NSString * preffix = [NSString stringWithFormat: @"grat%d", indexPath.row];

        UILabel *myText2 = (UILabel*)[cell viewWithTag:1];
        [myText2 setText:NSLocalizedString(preffix, @"")];

        UILabel *labelFRE2 = (UILabel*)[cell viewWithTag:2];
        [labelFRE2 setText:NSLocalizedString(@"frKey", @"")];       
        return cell;
}

Questo perde come l'inferno. Ogni volta che scorro la tabella, vengono aggiunte più perdite all'elenco degli strumenti.

Siete in grado di capire perché?

grazie per l'aiuto.

Modifica

Dopo il primo giro di commenti, ho modificato il codice precedente in questo

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identificadorNormal = @"Normal";

    UITableViewCell *cell;

    cell = [tableView dequeueReusableCellWithIdentifier: identificadorNormal];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
            reuseIdentifier:identificadorNormal] autorelease];

        UILabel * myText = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 54.0, 225, 18)];
        [myText setTextAlignment:UITextAlignmentLeft];
        [myText setBackgroundColor:[UIColor whiteColor ]];
        [myText setClipsToBounds:YES];
        [myText setFont:[UIFont systemFontOfSize:14.0]];
        [myText setTextColor:[UIColor blackColor]];
        [myText setAlpha:0.6];
        [myText setTag: 1];
        [cell addSubview:myText];
            [myText release];

        UILabel * labelFRE = [[UILabel alloc] initWithFrame:CGRectMake(235.0, 54.0, 80, 18)];
        [labelFRE setTextAlignment:UITextAlignmentCenter];
        [labelFRE setBackgroundColor:[UIColor greenColor ]];
        [labelFRE setClipsToBounds:YES];
        [labelFRE setFont:[UIFont boldSystemFontOfSize:14.0]];
        [labelFRE setTextColor:[UIColor blackColor]];
        [labelFRE setAlpha:0.75];
        [labelFRE setTag: 2];
        [cell addSubview:labelFRE];
            [labelFRE release];
    }

    cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] 
        pathForResource:[NSString stringWithFormat: @"table%d", indexPath.row] ofType:@"jpg"]];     
    NSString * preffix = [NSString stringWithFormat: @"grat%d", indexPath.row];

    UILabel *myText2 = (UILabel*)[cell viewWithTag:1];
    [myText2 setText:NSLocalizedString(preffix, @"")];

    UILabel *labelFRE2 = (UILabel*)[cell viewWithTag:2];
    [labelFRE2 setText:NSLocalizedString(@"frKey", @"")];       
    return cell;
}

le perdite continuano. Nessun cambiamento.

È stato utile?

Soluzione

Guardando http://imgur.com/XPRYF non sembra che sia una perdita. È presente sul dispositivo o nel simulatore?

Ci sono state perdite di eventi GSE quando si utilizzava l'accelerometro ma quelli avrebbero dovuto essere riparati in 3.0.

Prova anche a disabilitare NSAutoreleaseFreedObjectCheckEnabled, NSZombieEnabled e NSDebugEnabled se qualcuno di questi è abilitato dal momento che ha attivato il profiler per me diverse volte.

L'altra cosa di cui sono curioso è il motivo per cui hai impostato le tue celle in modo diverso a seconda che vengano fuori dal riutilizzo o meno ma questo è un problema separato.

Altri suggerimenti

Eviterei autorelease qui, poiché probabilmente creerai oggetti molte volte prima che il pool di autorelease abbia la possibilità di svuotare. Inoltre, non è eccezionale in situazioni intense di prestazioni (come scorrere un tavolo).

modifica

Dovrei aggiungere, nel caso ci sia confusione, invece di usare autorelease qui, invece dovresti

myThing = [[Obj alloc] initWithWhatever];
[myThing doStuff];
[cell addSubview:myThing];
[myThing release];

Hai verificato che identificadorNormal e @ " normal " sono uguali? Se continui a provare a dequeue una cella con identificativo @ " normal " , ma non esiste nessuno, creerai una cella con identificatore identificadorNormal . Se non è lo stesso di @ " normal " , continuerai a creare nuove celle ogni volta che la vista tabella tenta di visualizzare una cella.

Mi chiedo se le perdite si verificano quando UIImage carica le immagini?

Puoi provare a usare + imageNamed ? UIImage memorizzerà quindi le immagini nella cache (non con + imageWithContentsOfFile: ). Se si verificano perdite durante il caricamento delle immagini, ciò dovrebbe ridurre un po 'la perdita, ma probabilmente non la eliminerebbe.

NSString *imageName = [NSString stringWithFormat: @"table%d.jpg", indexPath.row];
cell.imageView.image = [UIImage imageNamed:imageName];         

Ho replicato il tuo codice nel mio progetto e questo perde nel simulatore, ma non perde su nessuno dei dispositivi che ho (iPhone 3GS, iPod Touch 2G).

Supponendo che tu stia riscontrando problemi anche nel simulatore, suppongo che questa sia solo un'altra conferma della raccomandazione di Apple di testare su un dispositivo reale.

Non ho mai pubblicato qui prima e non sono sicuro di seguire correttamente l'argomento. Il mio suggerimento sarebbe di verificare il livello di ottimizzazione del compilatore che si sta utilizzando. Con alcuni progetti (posso dettagliare più avanti se questo approccio aiuta) problemi funky come questo scompaiono usando -o o -o1. Qualcosa di più elevato e sembra che i valori inizializzati delle variabili di istanza non siano sempre affidabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top