2011-08-25 9 views
3

種類の哲学的な質問。 (保持されている)@propertyに定数文字列を代入するのは適切ですか?または、私はしなければならないself.string = [NSString stringWithString:@""];self.string = @ ""を(保持している)@propertyに割り当てていますか?

メモリリークはありますか?もしそれが過剰にリリースされたら?

これは定数文字列なので、NSStringオブジェクトと同じように動作しますか?

プロパティが(assign)の場合、それは実行ループの後で有効ではないことを意味しますか?

答えて

6

はい、問題ありません。どのような方法で行っても、定数の文字列はプログラムにコンパイルされます(なぜなら、それは[NSString stringWithString:@""]で使用する必要があるからです)。定数文字列は実際には保持/解放されるわけではありませんが、重要なのはその意味です。文字列を割り当てています(これは、+ 0 retainCountのネットを持っています - あなたはallocを編集していません)あなたはそれを所有していないので、所有権を持つ財産へ)。プロパティが(assign)の場合、定数文字列でも動作する可能性がありますが、自動解放プールが排水された後は意味的に無効になります。

+1

同意する。そして、 '[NSString stringWithString:@" ... "]'の理由は決してありません。それは何も達成するためのサイクルの無駄です。 –

+1

@Robネーピア:それを使用する唯一の理由は、変更可能な文字列がある場合です。 '-copy'の代わりに+0のようなものです。 – jtbandes

+0

Robは、stringWithString:に '_literal_ 'を渡す理由は決してないと考えました。 –

関連する問題