2009-03-02 11 views
0

が、私は他の1つのクラスから文字列を送信したい:iPhone上のクラス間で値を転送する方法は?

@property (nonatomic, retain) NSString *str;

2)と、文字列を返信する方法:

1)class1で、私は、文字列を保持するプロパティを追加します:

@property (nonatomic, retain) NSString *returnStr;


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

3)クラス2では、私が受け取った文字列を保持するプロパティを追加します210

4)と次のコード

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

しかし、プログラムは、= returnStrで停止[sendBackStr C1:@ "URL"]。何が間違っているかについてのアイデアはありますか?

答えて

1

stringWithStringは自動解放文字列を返すクラスメソッドです。あなたはこのようにそれを呼び出すべきである:

ここ
myProperty = [NSString stringWithString:strURL]; 

私はstringWithStringメソッドから返される自動解放文字列に保持カウントをインクリメントし、あなたの財産は、コピーを行うと仮定します。 (alloc呼び出しから返されるオブジェクトは1の保持カウントを持ち、オートレリースされません)。通常、文字列にretainプロパティではなくcopyプロパティを与えるのが普通です。通常は文字列のコピーを必要とします。誰かが所有している文字列。

私が理解できないのは、単なる例でない限り、このようなコードを書いた理由です。クラス2で、あなたがする必要があるのは、書き込みです。

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

あなたの答えをありがとう。そして、はい、これは値を転送するために書いた単なるテストです。 –

1

stringWithString:クラスのインスタンスではなくNSStringクラスに送信する必要があるメッセージです(allocを使用して返されます)。

正しいコードは次のようになります。あなたは割り当て、保持、およびポインタの自動解放の周りのイディオムについてもっと自分をfamilarizeする場合があります

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

。あなたには、いくつかの理由で、この文字列をALLOCとsendBackStrからそれを返すしたい場合は、次のメッセージを、あなたはおそらく、このコードを望む:

-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    return [[[NSString alloc] initWithString:strURL] autorelease]; 
} 
+0

allocは "あなたのクラス"のインスタンスを返さない - それは[NSString alloc]です。しかし、stringWithStringはクラスメソッドです。 –

関連する問題