1

基本的に私はを返すクラスメソッドを持っていますfloat array. を返すと、static array必要な配列のサイズは入力サイズに依存するため、入力パラメータによっては大きすぎるか小さすぎるという問題があります。返品した場合float array[arraysize]、サイズの問題は解決しましたが、他の問題があります。

たとえば、の各要素にnon-static float array個別に対処するとします。

    NSLog(@"array[0] %f array[1] %f array[2] %f",array[0],array[1],array[2]);

配列の正しい値を出力します。ただし、代わりにループを使用すると、たとえば

    for (int i = 0; i < 3; i++) 
 {
    NSLog(@"array[%i] %f",i,array[i]);
 }

非常に奇妙な数字がいくつか得られます (奇妙なことに、最後のインデックスは別として)。この 2 つのことで異なる結果が生じるのはなぜでしょうか。単純に a を返すのは悪い習慣であることは承知していますnon static floatが、それでも、配列をアドレス指定するこれら 2 つの方法は同じように見えます。

クラス メソッドからの関連コード (非静的バージョンの場合)...

    float array[arraysize];

    //many lines of code later

    if (weShouldStoreValue == true) {
         array[index] = theFloat;
         index = index + 1;
     }

    //more lines of code later

    return array;

(float*) を返すことに注意してください。

4

1 に答える 1

0

それはできません。メソッドまたは関数のスコープから出ると、配列は死んでしまいます。
これは、プレーン C で malloc を使用して実行できます。

float* array= malloc(arraysize*sizeof(float));

//many lines of code later

if (weShouldStoreValue == true) {
     array[index] = theFloat;
     index = index + 1;
 }

//more lines of code later

return array;

関連するメモリを解放することを忘れないでください。
ガベージ コレクターを使用し、メモリを気にしないことに慣れている場合は、malloc のデータを NSData オブジェクトにラップして解放し、次のような方法で割り当てます。

+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)freeWhenDone;
// Pass YES to the freeWhenDone argument

しかし、この時点で数値の NSMutableArray を使用しないのはなぜでしょうか?

于 2012-12-04T11:06:33.693 に答える