0

私は自分のアプリを更新しているところですが、眉をひそめた古いコードを見つけました。私のコメントは通常かなり冗長ですが、なぜこれを行ったのかを説明していませんでした。

次のように、ModalView を提示し、タイトルと UITextField を更新しています。

addStoryItem.placeholderText = @"Foo"; //The text is always a static string.
addStoryItem.modalTitleText  = @"Bar";

モーダルでは、これらの値の両方にプロパティが割り当てられます。

@property (readwrite, assign) NSString *placeholderText;
@property (readwrite, assign) NSString *modalTitleText;

モーダルが閉じられた後、モーダルの dealloc で解放されます。

[placeholderText release];
[modalTitleText  release];

これは安全ですか/賢明ですか/大丈夫ですか? 保持サイクルを回避するためにこれを行った可能性があると思います。

4

1 に答える 1

3

あなたはいくつかのルールを破りました:

  1. 所有しているものをリリースします。(割り当てプロパティを所有していません。文字列リテラルを解放するのはノーなので、それで逃げました)
  2. 常に NSString プロパティをコピーします。(代入はここでは非常に危険です。オブジェクトがなくなる可能性があります。繰り返しますが、リテラルではありません。)

保持サイクルを回避することでこれを正当化します。しかし、文字列は (通常) 他のオブジェクトを参照しないため、循環はここでは問題になりません。

于 2012-08-26T19:29:15.950 に答える