Question

Je souhaite envoyer une chaîne d'une classe à l'autre:

1) Dans class1, j'ajoute une propriété pour contenir la chaîne:

@property (nonatomic, retain) NSString *str; 

2) et une méthode pour renvoyer une chaîne:


-(NSString *)sendBackStr:(NSString *)strURL
{
    NSString *str = [[NSString alloc] stringWithString:strURL];
    return str;
}

3) En classe 2, j'ajoute une propriété pour contenir la chaîne reçue:

@property (nonatomic, retain) NSString *returnStr; 

4) et le code suivant:

Class1 *c1 = [[Class1 alloc] init]; 
returnStr = [c1 sendBackStr:@"URL"];

Mais le programme s’arrête à returnStr = [c1 sendBackStr: @ " URL "]; Des idées sur ce qui ne va pas?

Était-ce utile?

La solution

stringWithString est une méthode de classe renvoyant une chaîne autoreleased. Vous devriez l'appeler comme ceci:

myProperty = [NSString stringWithString:strURL]; 

Ici, je suppose que votre propriété effectue une copie pour incrémenter le nombre de retenues sur la chaîne autoreleased renvoyée par la méthode stringWithString. (Les objets renvoyés par les appels d'allocation ont un nombre de conservations égal à un et ne sont pas autorisés automatiquement.) Il est plus habituel de donner aux chaînes la propriété copy plutôt que de les conserver: vous voulez généralement votre propre copie d'une chaîne, pas une référence partagée à un chaîne appartenant à quelqu'un d'autre.

Ce que je ne comprends pas non plus, c'est pourquoi vous avez écrit le code ainsi, à moins qu'il ne s'agisse que d'un exemple. En classe 2, tout ce que vous avez à faire est d’écrire

returnStr = [NSString stringWithString:@"URL"];

Autres conseils

stringWithString: est un message qui doit être envoyé à la classe NSString, pas une instance de votre classe (renvoyée via alloc).

Le code correct devrait être:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [NSString stringWithString:strURL];
}

Vous voudrez peut-être vous familiariser davantage avec les idiomes concernant l'allocation, la rétention et la libération automatique des pointeurs. Si vous souhaitez allouer cette chaîne pour une raison quelconque et la renvoyer à partir du message sendBackStr:, vous voudrez probablement ce code:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top