0

私は記憶とそのことについてすべてを理解し終えていないと思いますが、これは私の問題です:

プッシュされるビューに変数定義されたidActualがあり(そのヘッダーで定義されたvar)、(NSLog(idActual))を読み取って、問題なくnilに設定できます。しかし、その値を変更すると、CFStringエラーが発生します。これは、メモリ管理が不適切であることが原因であると考えられます。これを試しました。

私はこれを行うことができます:nextView.idActual = nil;

私はこれを行うことはできません:

a) nextView.idActual = @"1";

b) NSString *str = [NSString stringWithFormat:@"1"]; 
   nextView.idActual =  str;

c) NSString *str = [[NSString alloc] initWithFormat:@"1"];
   nextView.idActual = str;
   [str release];

a、b、cは常にCFStringエラーを表示します:***-[CFString isEqualToString:]:割り当て解除されたインスタンスにメッセージが送信されました

4

1 に答える 1

0

値を変更しようとすると、に含まれているCFString(NSString)nextView.idActualがすでに解放されているようです。関連するコードをもっと投稿できれば、それは役に立ちます。

idActualとして宣言されていると思い@property(nonatomic,retain)ます。に新しい値を設定しようとするとidActual、そのプロパティのsetterメソッドが呼び出されます(setterが自動的に生成された可能性があります)。setterメソッドが最初に行うことは、古い値と新しい値を比較しようとすることです。その後、クラッシュします。

そのsetterメソッドが新しい値を古い値と比較しようとすると、古い値がすでに割り当て解除されているため、問題が発生します。

[nextView.idActual release]これらの新しい値を割り当てる前に電話をかけていますか?もしそうなら、その行をコメントアウトして、それがあなたの問題を解決するかどうか確かめてください。自動生成されたセッターメソッドは、古い値を解放します。

于 2011-09-05T18:40:24.087 に答える