Domanda

Ho un'app di cacao con ARC abilitato.Sto usando OS 10.8 e XCode 4.4.L'app sporadicamente si blocca sulle chiamate a CGLyRelease, dumping messaggi come la seguente console:

error for object 0x10a2d2000: entry for pointer being freed from death-row vanished
.

Se commento le chiamate a CGLYRYRelease le fermate di schianamento.Devo chiamare clicayrelease in Arc Abilitato progetti?La documentazione non è molto chiara su questo.

È difficile postare il codice per questo perché è diffuso durante un file di grandi dimensioni per una classe che eredita da nsview.La classe ha un membro dei dati CGLayerRef layer;.Quindi all'interno della funzione DreanRect:

    if (layer == nil) {
        layer = CGLayerCreateWithContext(context, self.frame.size, NULL);
        // draw some stuff into CGLayerGetContext(layer)
    }
    CGContextDrawLayerInRect(context, self.bounds, layer);
.

La classe è anche un delegato della sua finestra e ha la seguente funzione

- (void)windowDidEndLiveResize:(NSNotification *)notification {
    if (layer) {
        //CGLayerRelease(layer);
        layer = nil;
    }
    [self setNeedsDisplay:YES];
}
.

Anche all'interno di un setter di proprietà

- (void)setPitch:(NSArray *)aPitch {
    pitch = aPitch;
    if (layer) {
        //CGLayerRelease(layer);
        layer = nil;
    }
}
.

Ora se non compromevo le chiamate a CGLayerRelease, quindi ho sporadicamente il crollo sopra menzionato.Sottolineo "sporadicamente" perché non succede sempre.

È stato utile?

Soluzione

Sì, è necessario chiamare CGLyRelease () in Arc.Gli incarichi di cui sopra sembrano corretti, ma sospetto che tu possa avere altri.Stai accedendo direttamente ai tuoi Ivars, che è la causa n. 1 di questi tipi di incidenti.Non accedere ai tuoi Ivars tranne che in init e dealloc.Creare un accessor per setLayer: che rilascia correttamente il vecchio e crea uno nuovo e lo usa sempre.

È molto possibile che il tuo codice CGLAYER stia bene, e che è qualcos'altro come un cgpath che stai aggiungendo al clayer.Sposta tutti i tuoi IVAR per gli accessori.Altrimenti inseguerai questi tipi di bug per sempre.

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