La méthode suivante prend un double pointeur vers NSString
et renseigne cela avec une valeur, comme suit:La libération d'un retour par référence NSString provoque une panne
@implementation Exp
- (int) func:(NSString**) dpStr
{
//------
*dpStr = [self func_2];
//------
}
Maintenant, il est appelé comme ceci:
int main()
{
NSString * str = [[NSString alloc] init];
int retCode = [Exp func:&str];
// <----- Now here I'm able to access value returned by func ------->
[str release]; // <--- It is crashing here
}
Quelqu'un peut-il expliquer pourquoi il plante?
+1 pour répondre – MByD
beaucoup mieux et détaillée Si je remplacerai NSString avec NSMutableString et ne suivant dans la fonction - (int) func: (NSMutableString **) dpStr { ------ [* dpStr setString: [self func_2]]; ------ } Ensuite, je suis capable de libérer de la mémoire en utilisant [str release]. Ce plaisir est défini dans la bibliothèque et je l'appelle amusant de mon application qui est liée statiquement avec cette bibliothèque Quelle approche est recommandée ... – macdev30
L'approche recommandée est ce que j'ai décrit dans ma réponse. En Objective-C, vous n'avez pas besoin de fournir des tampons pour les chaînes et autres; le système d'exploitation le gère généralement pour vous. –