Je ne sais pas où ni comment libérer
droit, vous devez d'abord vous familiariser avec le Cocoa Memory Management Rules. En résumé, si vous obtenez un objet par alloc, une méthode contenant "copy", une méthode commençant par "new" ou si vous la conservez, vous devez libérer ou libérer.
Prenez method1:
-(void)method1{
userInputString = @"something";
}
userInputString n'a pas été obtenue avec alloc, nouvelle ou copie, ni vous avez conservé ce. Par conséquent, vous ne le possédez pas, vous ne devez donc pas le libérer. Si vous aviez fait cela:
userInputString = [@"foo" copy];
ou ceci:
userInputString = [[NSString alloc] initWithString: @"foo"];
ou ceci:
userInputString = [@"foo" retain];
vous possédez la chaîne que vous devez donc libérer ou AutoRelease il.
Lorsque vous le relâchez, cela dépend de sa portée. S'il s'agit d'une variable locale, vous devez la libérer ou la libérer avant que le bloc déclaré ne soit fermé. S'il s'agit d'une variable d'instance, vous devez la libérer avant que l'objet dans lequel elle se trouve soit désalloué. c'est-à-dire que vous devez le libérer dans la méthode dealloc pour l'objet. Dans tous les cas, si vous remplacez un objet que vous possédez, vous devez le libérer en premier. Donc:
userInputString = [someOtherString copy]; // you own userInputString
// do some stuff
[userInputString release]; // you no longer own it
userInputString = [someOtherString retain];// overwrite the pointeer with something else
C'est l'une des raisons de l'ajout de getters et setters pour les variables d'instance. Chaque fois que vous définissez une nouvelle valeur, vous devez libérer l'ancienne valeur et conserver la nouvelle valeur (en vous assurant que l'ancienne valeur et la nouvelle valeur sont différentes), de sorte que ceci est encapsulé dans le setter. Une propriété synthétisée ajoute ce code automatiquement.
pouvez-vous envoyer le journal des erreurs –
aucun message d'erreur, juste fuite de mémoire. trouvé en utilisant des instruments. – Fasid
Vous devez montrer comment vous CRÉEZ la chaîne et comment vous la libérez si vous le faites. Sinon, nous ne pouvons pas savoir ce qui ne va pas – willcodejavaforfood