Skip to content

どのNSStringはreleaseするのか?

2011年8月9日

結構初歩的だけど悩みます。
NSStringの活用の仕方としては

①NSString = [[NSString alloc] init];
②NSString = [NSString stringWith〜];
③NSString = @””;

の3パターンがあると思います。

①の時はもちろんreleaseします。
②の時はしません
③が問題です。

そもそも③の使い方があっているかどうか分からないところもありますが、問題なく使えてしまうので、サクっと使っちゃったりしてました。

使ってきた中では「まあallocしてないししなくていいんじゃないの?」と思って使ってました。実際問題はなく動きます。

しかし、メンバ変数として活用しているNSStringに、宣言しているコントローラで直接文字列を入れるようにすると、落ちてしまう様子。
だけど、他のコントローラから「例) detailViewController.titlestring = @”タイトル”」みたいに使うときは特に問題はない。 何この分けわかんない感じ…。

まとめると

他のコントローラから「detailViewController.titlestring = @”タイトル”」
→dealloc、ViewDidUnloadに書くだけでOK

宣言したコントローラで「titleString = @”タイトル”」
→なんども表示すると落ちる。きちんとinitしましょう

となるみたいです。

あと直接代入するとメモリの確保が行われず、他のオブジェクトが入り込んでくる場合もあるみたい。

とにかく代入は不安定なんですね。

ただ、プロパティは別、のような感じみたい。ややこしいけど。

ともかく、リスク回避するならプロパティ以外は直接文字列入れるな!ってことですね〜。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。