Frage

Ich möchte eine Zeichenfolge von einer Klasse zur anderen senden:

1) In class1, füge ich eine Eigenschaft die Zeichenfolge zu halten:

@property (nonatomic, retain) NSString *str; 

2) und eine Methode einen String zurück zu senden:


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

3) In Klasse 2, füge ich eine Eigenschaft der empfangenen Zeichenfolge zu halten:

@property (nonatomic, retain) NSString *returnStr; 

4) und der folgende Code:

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

Aber das Programm hält an returnStr = [c1 sendBackStr: @ "URL"]; Irgendwelche Ideen, was ist los mit ihm?

War es hilfreich?

Lösung

stringWithString ist eine Klasse, Methode, um eine Autoreleased String zurück. Sie sollte es so sein Aufruf:

myProperty = [NSString stringWithString:strURL]; 

Hier gehe ich davon aus Ihrer Immobilie eine Kopie der Fall ist, die Beibehaltungszähler auf dem Autoreleased Zeichenfolge zu erhöhen, die von der stringWithString Methode zurückgegeben wird. (Objekte zurückgegeben von alloc Anrufe haben eine Zählung von eins behalten und nicht Autoreleased.) Es ist mehr üblich ist eher die Kopie Eigenschaft zu geben Strings als derjenige behalten - Sie in der Regel nur Ihre eigene Kopie einer Zeichenfolge wollen, nicht eine gemeinsame Bezugnahme auf ein Zeichenfolge im Besitz von jemand anderem.

Was kann ich auch nicht verstehen, warum Sie den Code so geschrieben haben, es sei denn, es ist nur ein Beispiel ist. In der Klasse 2, alles, was Sie tun müssen, ist schreiben

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

Andere Tipps

stringWithString: ist eine Nachricht, die an die NSString-Klasse gesendet werden muss, nicht eine Instanz der Klasse (über alloc zurück)

.

Der richtige Code sollte sein:

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

Sie könnten sich mehr über die Idiome um Zuteilung, Retention familarize möchten, und autoreleasing von Zeigern. Wenn Sie diese Zeichenfolge aus irgendeinem Grund Alloc wollte und senden Sie es aus der sendBackStr: Nachricht, dann würden Sie wahrscheinlich diesen Code wollen:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top