0

クラス間で何度も送信NSStringsしていますが、それらを失っていると思います。

私が持っているとしましょう:classA ,classB, classC

classA(割り当てられた)のインスタンスを持ちclassB、彼はクラスBの関数、Bの関数を呼び出しています:

-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm
{ //here i can see and log the string 'data', but i am sending him to classC from here
  [classCInstance send:data];
}

classAその関数を次のように呼び出します。..setProtocolDataForString:@"ran"];

内部に書いたように、classB が文字列を取得していることがわかりますが、彼が彼を別の classC に渡した後、それが失われていると思います。NS関数は、取得した引数の値をどのくらい正確に保存/保持しますか? この文字列が無限のクラス間で渡され、解放されないようにするにはどうすればよいでしょうか?

**重要かどうかはわかりませんが、classA/B は ARC を使用しませんが、classC は使用します

4

3 に答える 3

3

クラスBには、クラスに渡す文字列の独自のコピーが必要Cです。インスタンスは値オブジェクトと見なされるためNSString、単に文字列を保持するのではなく、代わりにコピーを作成します。

NSString newString = [aString copy];このシナリオでaStringは、リリースされない独自の保持カウントを持つコピーが既にあるため、安全にリリースできます。

コピーを解放/自動解放することを忘れないでください。これは自動的に行われるわけではありません。これを忘れると、アプリケーションでメモリ リークが発生します。

次のコードが機能するはずです。

[classCInstance send:[[data copy] autorelease]];
于 2013-03-07T12:04:15.103 に答える
0

クラス A と B は ARC に対応していないため、文字列を保持する必要があります。

-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm
{ //here I can see and log the string 'data', but I am sending him to classC from here
   [data retain];
  [classCInstance send:data];
}
于 2013-03-07T12:12:31.360 に答える
0

クラス メソッドに渡す前に、NSStringオブジェクトを割り当てるか保持します。

于 2013-03-07T12:04:39.270 に答える