2009-09-27 12 views
4

Selon another Stack Overflow post le message drain est un Apple uniquement appel:incompatibilité GNUStep NSAutoreleasePool

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
NSLog (@"Hello"); 
[pool drain]; 
return 0; 

Est-il sûr de remplacer drain avec release? J'essaie de porter une application Objective-C sous Linux (Ubuntu pour le moment). Devrais-je abandonner avant même d'avoir commencé? (Je suis déjà avoir des problèmes en essayant d'obtenir NSURLConnection travail)

Répondre

4

De la documentation d'Apple de drain:

[...] cette méthode se comporte comme la libération. [...]

Drainer un pool d'autorelease signifie donc le libérer inévitablement. À mon avis, Apple devrait désapprouver drain car cela ne fait que créer de la confusion.

Mais:

Considérations particulières:
Dans un environnement recueilli des ordures, release est un no-op, donc à moins que vous ne voulez pas donner le collecteur un soupçon est important d'utiliser drain dans n'importe quel code qui peut être compilé pour un environnement garbage-collecté.

+0

Merci d'avoir éclairci cela. Il ne m'est pas venu à l'esprit de lire les docs d'Apple pour comprendre les bibliothèques non apple (: – Jacob

+0

-drain ne sera pas - ne sera jamais - obsolète exactement parce qu'il prend en charge le garbage collector.C'est un avantage critique pour la performance dans le code qui doit exécuter GC et non GC, tels que certains plug-ins et les frameworks du système. – bbum

Questions connexes