0

.h ファイル内:

double var1;
NSString *Items[90];

.m ファイル内:

var1 = 1000;
NSString  *j = [NSString stringWithFormat:@"%g", var1 ];
Items[42] = [@" Per each " stringByAppendingString: j ];

上記のコードを参照してください。問題は、実行中のアプリを通じて、この Items[42] 値を必要とする proc があることですが、値はもうありません (消去しませんでした) が、セルは完全に空で、null またはスペースはありません。セル値が解放されたかのように。

一方、Items[42] に変数 (var1 など) を付けない文字列 (つまり、Items[42] = @"hello there";) を配置すると、すべて問題なく、Items[42] の値は保存されています。

可変コンテンツ ( var1 など) が表示されたときにセルがコンテンツを失う理由は何ですか?

ティア

4

5 に答える 5

1

オブジェクトの寿命についてもっと注意する必要がありNSStringます。[NSString stringWithBlah]メソッドはd個のautoreleaseインスタンスを返します(したがって、ポインターはぶら下がっています-クラッシュが発生していないことに驚いています)。

[[NSString alloc] initWithBlah]代わりに、 (またはどこでも)releaseのインスタンスを使用する必要があります。dealloc

于 2012-05-30T14:44:59.037 に答える
1

一時文字列の参照カウンターがゼロです。それはいつでも破壊されるでしょう。この問題を解決するには、次の 3 つのオプションがあります。

  1. Items[42] = [[@" Per each " stringByAppendingString: var1 ] retain];
    ARC 以外の環境では、[Items[42] release]後で呼び出すことを忘れないでください。
  2. NSMutableArray*アイテムをor NSArray*、つまりアイテムとして宣言しますNSMutableArray* 。オブジェクトの参照カウントを自動的に管理します
  3. ARC を使用するようにプログラムを変換する

グローバル (静的) 定数文字列の場合、それらは無限の参照カウンターを持ち、破棄されることはありません。

于 2012-05-30T14:49:00.807 に答える
0

意味しましたか(最後の行)

Items[42] = [@" Per each " stringByAppendingString: j ];

それ以外の:

Items[42] = [@" Per each " stringByAppendingString: var1 ];
于 2012-05-30T14:46:08.250 に答える
0

これを試しましたか?

      Items[42] = [@" Per each " stringByAppendingString: j ];
于 2012-05-30T14:46:08.267 に答える
0

ヘッダー ファイルで裸の変数を宣言しないでください。予期しない結果が得られます。

.h:

extern double var1;
extern NSString *Items[90];

.m:

double var1;
NSString *Items[90];
于 2012-05-30T14:48:06.627 に答える