0

iPhoneでobjective-cを使用すると、このコードの何が問題になりますか?メモリリークですか?なんで?これを正しく行うにはどうすればよいですか?

NSMutableString *result = [NSMutableString stringWithFormat:@"the value is %d", i];

...その後、私のコードで...これを次のように変更する必要があるかもしれません:

result = [NSMutableString stringWithFormat:@"the value is now %d", i];

stringWithFormatを2回使用する必要があります...しかし、新しい文字列を作成し、古い文字列を正しく解放していませんか?

4

4 に答える 4

5

stringWithFormat:いいえ、自動解放されたオブジェクトを返すため、メモリ リークは発生しません。

于 2010-06-21T14:36:41.557 に答える
2

次のように、既存の NSMutableString に対してインスタンス メソッド「setString」を使用できます。

[ result setString:[NSString stringWithFormat:@"the value is now %d", i] ];
于 2010-06-21T14:38:30.753 に答える
0

文字列を本当に再利用したい場合は、次のようなものを使用できます

[result setString:@""];
[result appendFormat:@"the value is now %d", i];

ただし、パフォーマンス/メモリの問題に気付かない限り、そのまま使用してください

NSString *result = [NSString stringWithFormat:@"the value is %d", i];

/* ... */

result = [NSString stringWithFormat:@"the value is now %d", i];

不変オブジェクトは足元で変更できないため、通常、不変オブジェクトを操作する方が簡単です。

于 2010-06-21T14:41:41.967 に答える
-1

あなたが持っているものは、同じ可変文字列への他の参照がない限り、可変文字列を新しいコンテンツに置き換える自然な方法のように思えます。

それへの他の参照がなく、パフォーマンス/メモリフットプリントを改善するためだけに文字列を再利用している場合、それは時期尚早の最適化のように聞こえます。

ところで、あなたは stringWithFormat: 経由で取得した文字列を所有していないので、それを解放する必要はありません (実際にそうすべきではありません)。

于 2010-06-21T15:48:22.773 に答える