J'utilise la classe d'accumulation d'Apple dans mon projet de non-ARC. Et quand je l'exécute avec des instruments pour trouver des fuites de mémoire, il fait référence à la méthode de l'accessibilité. Voici le problème:
Reachability *reachability = [[Reachability reachabilityForInternetConnection] autorelease]; [reachability startNotifier];
6 Réponses :
Si le retourValue est égal à l'objet d'accessibilité NULL est divulgué, vous devez le relâcher dans ce cas. Aussi par convention de nommage de cacao ( https://developer.apple.com/library/ios/documentation/cocoa/conceptuelle/memorymgmt/articles/mmrules.html#//apple_ref/doc/uid/20000994-SW1 ) Vous devez renvoyer l'objet AutoReleed: ou renommer la méthode pour démarrer par exemple à partir du nouveau: Essayez d'exécuter l'analyseur statique en Xcode, cela peut aider à repérer les problèmes. P> P> NOUVELREDABILITABILITEWITHITHITHITHADDRESS CODE> ou quelque chose comme ça si vous ne voulez pas retourner un Objet automatique. p>
et analyseur et arc s'appuient également sur des conventions de dénomination
Daij-Djan, pourriez-vous expliquer?
Oui, et on dirait que ça marche, merci beaucoup! La dernière question est la suivante: pourquoi personne ne remarque-t-il cette erreur d'accrobabilité? C'est une classe assez célèbre, elle est également téléchargée sur la page de la WEP officielle de Apple ( développeur.apple.com/library/ios/samplecode/reachidique/.../a>).
Je ne sais pas comment écrit un échantillon de code dans Apple, mais il contient fréquemment des bugs. Alors, utilisez-le uniquement comme illustration du principe principal et ne pas copier-coller-la coller aveuglément dans votre projet. Si vous désirez corriger le bogue, vous pouvez remplir un rapport de bogues sur bugReporrer.apple.com de votre compte de développeur.
Téléchargez le dernier code d'accentrage d'Apple. Cette fuite est traitée dans le code mis à jour ( développeur.apple.com/ Bibliothèque / iOS / Samplecode / accessibilité / ... )
Le bon correctif pour le code est le suivant en plus de Cfrelease dans DealLoc.
Regardez le corps du code ci-dessous. Un corps similaire a besoin d'accéder à l'accessibilitéWithHostName Code également. p>
Je pense mieux de le faire prochainement:
+ (Reachability*) reachabilityWithHostName: (NSString*) hostName; { Reachability* retVal = NULL; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); if(reachability!= NULL) { retVal= [[self alloc] init]; if(retVal!= NULL) { retVal->reachabilityRef = reachability; retVal->localWiFiRef = NO; } else { CFRelease(reachability); } } return retVal; }
@Alexart Réponse a fonctionné pour moi, mais si vous souhaitez une version simplifiée, utilisez } p> p>
Dernière portée accessibilité.M semble avoir besoin d'arc, mon application ne l'utilise pas. P>
Je viens de l'allumer pour cela: p>
aller à cible \ Build Phases \ Compile Sources P> Li>
Recherche accès et double-cliquez dessus P> Li>
Ajouter -fobjc-arc p> li> ol>
La fuite de mémoire est partie maintenant p>
solution avec arc activé mise à jour mise à jour mise à jour accessibilité code> classe.
CFAtorLelease (Réf) Code> Sous la ligne d'émission. LI>
Cfrelease (Self.eaChabilitéRef) Code> Code de
DealLoc CODE> LI>
ol>
dealloc code> p>
accessibilitéWithaddress code> p>
accessibilitéWithHostName code> p>