2010-05-03 16 views
0

Ceci est le corps du sélecteur qui est spécifié dans NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgumentAppel UIGetScreenImage() sur les impressions de fil-donné naissance à la main « _NSAutoreleaseNoPool(): » un message pour ouvrir une session

 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    while (doIt) 
    { 
     if (doItForSure) 
     { 
      NSLog(@"checking"); 
      doItForSure = NO; 

      (void)gettimeofday(&start, NULL); 

      /* 
       do some stuff */ 

      // the next line prints "_NSAutoreleaseNoPool():" message to the log 
      CGImageRef screenImage = UIGetScreenImage(); 


      /* 
       do some other stuff */ 

      (void)gettimeofday(&end, NULL); 

      elapsed = ((double)(end.tv_sec) + (double)(end.tv_usec)/1000000) - ((double)(start.tv_sec) + (double)(start.tv_usec)/1000000); 

      NSLog(@"Time elapsed: %e", elapsed); 

      [pool drain]; 
     } 
    } 

    [pool release]; 

Même avec la piscine autorelease présente, je reçois ce imprimé dans le journal quand je l'appelle UIGetScreenImage():

 
2010-05-03 11:39:04.588 ProjectName[763:5903] *** _NSAutoreleaseNoPool(): Object 0x15a2e0 of class NSCFNumber autoreleased with no pool in place - just leaking 

quelqu'un at-il vu d'autre avec ce UIGetScreenImage() sur un thread séparé?

Répondre

0

[pool drain] sur iOS se comporte de la même manière que [pool release]. Donc, après la première itération de votre boucle while vous finissez par n'avoir aucune piscine autorelease en place. Retirez le drain et ça devrait aller. Vous ne savez pas si vous pouvez utiliser UIGetScreenImage() dans d'autres threads que le thread principal.