2014-04-28 1 views
0

J'ai vu beaucoup de questions sur SO à propos de ce thème, mais ils ne me posent pas de question.CGContextRelease - Décrément incorrect du nombre de références d'un objet qui n'est pas détenu

Analyzer me donne cet avertissement

décrément incorrect du compte de référence d'un objet qui n'appartient pas à ce moment-là par l'appelant

mais dans mon cas, la méthode en question ne génère pas ou n'est pas destiné à retourner un contexte.

Ma méthode est comme ceci:

@property (nonatomic, assign) CGContextRef ctx; 

- (void)generatePDFWithSize:(CGSize)size andURL:(NSURL*)url { 

    CGRect mediaBox = CGRectZero; 
    mediaBox.size = tamanho; 

    self.ctx = CGPDFContextCreateWithURL((__bridge CFURLRef)(URL), &mediaBox, NULL); 

    for (int i=0; i<numberOfPages; i++) { 
    CGPDFContextBeginPage(self.ctx, NULL); 
    //... bla bla bla... generate page 
    CGPDFContextEndPage(self.ctx); 
    } 

    CGContextRelease(self.ctx); 
} 

Analyzer pointe vers la dernière ligne.

Comment résoudre ce problème?

Répondre

1

Vous pouvez conserver une référence distincte à votre contexte tel que:

CGContextRef ctx = CGPDFContextCreateWithURL((__bridge CFURLRef)(URL), &mediaBox, NULL); 
self.ctx = ctx; 

Ensuite, vous pouvez libérer le contexte que vous avez créé en appelant:

CFRelease (ctx); 

Vous n'êtes pas libérer celui que le compilateur croit posséder.

+0

ahhhhhhhhhh .... merci !!! Je pensais que Xcode était assez intelligent! – SpaceDog

Questions connexes