7
votes

Fuite de la mémoire accessible d'Apple

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];


0 commentaires

6 Réponses :


4
votes

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: xxx

ou renommer la méthode pour démarrer par exemple à partir du nouveau: NOUVELREDABILITABILITEWITHITHITHITHADDRESS ou quelque chose comme ça si vous ne voulez pas retourner un Objet automatique.

Essayez d'exécuter l'analyseur statique en Xcode, cela peut aider à repérer les problèmes.


5 commentaires

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é / ... )



0
votes

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. xxx


0 commentaires

7
votes

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;
}


0 commentaires

10
votes

@Alexart Réponse a fonctionné pour moi, mais si vous souhaitez une version simplifiée, utilisez xxx

}


0 commentaires

1
votes

Dernière portée accessibilité.M semble avoir besoin d'arc, mon application ne l'utilise pas.

Je viens de l'allumer pour cela:

  1. aller à cible \ Build Phases \ Compile Sources

  2. Recherche accès et double-cliquez dessus

  3. Ajouter -fobjc-arc

    La fuite de mémoire est partie maintenant


0 commentaires

4
votes

solution avec arc activé accessibilité classe.

  1. Ajouter CFAtorLelease (Réf) Sous la ligne d'émission.
  2. Supprimer le Cfrelease (Self.eaChabilitéRef) Code de DealLoc

    mise à jour dealloc xxx

    mise à jour accessibilitéWithaddress xxx

    mise à jour accessibilitéWithHostName xxx


0 commentaires