2009-07-31 19 views
0

私は本当にNSStringsと混同しています。私はそれがあるべきのiPhone Dev - NSString Creation

NSString *aString = @"Hello"; 

やるべきときと同じように:あなたはNSStringのプロパティに値を代入しているとき

NSString *aString = [[NSString alloc] initWithString:@"Hello"]; 

しかし、その後、その異なるが、それではないでしょうか? 誰かが私のためにこれをクリアすることはできますか?

ありがとうございます!

答えて

2

あなたが最初に行う必要がありますが、それらはほとんど機能的に同じです。あなたは、例えば、普通のNSStringの文字列オブジェクトのように一定のNSStringsを扱うことができます。

[@"Hello" length] 

あなたはプロパティに割り当てることができます。5.を返し、すべてがちょうど動作します。あなたが気づくかもしれない1つの事は、定数NSStringsを使うと、保持/解放について心配する必要がないということです。これは、実際にはアプリケーションの読み取り専用データセクションにマップされ、メモリを割り当てられていないためです。それらに対するコールを保持し、解放することは、まだ機能しています。

+0

わかりましたが、私はそれをフォーマットしたいと言っています。私はinitWithFormat(またはstringWithFormat autoreleaseメソッド)を割り当てる必要がありますか? – mk12

+1

ええ、フォーマットで生成している文字列は定数ではないため、実行時に動的に作成されます。 –

0
NSString *aString = @"Hello"; 

autoreleased文字列を作成します。つまり、明示的にretainを指定していないと、メソッドが終了した後に消えてしまうことがあります(それはまったく問題ありません)。しかし、その時間を過ぎてそれを保持したい場合は、それを保持する必要があります。

あなたはこの

@property (retain) NSString *aString; 

のような、その文字列のプロパティを作成し、次のように割り当てた場合:

self.aString = @"Hello"; 

は、その後、あなたが適切に文字列を保持してきたし、それが周りに固執します。

一方、alloc, initを使用すると、保持カウントが1の文字列が作成され、その方法を過ぎる必要がない場合は、releaseとなります。

****編集:他の人が指摘したように「こんにちは」@は、自動解放文字列ではありません。私の悪い。一般的には****

+0

これは正しくありません。あなたは定数NSStringを保持する必要はありません。それは、プログラムの読み取り専用ページにマップされるため、メモリを割り当てないNSStringクラスタークラスの特別なサブクラスです。 –

+0

私の編集が見えませんでしたか? – jbrennan