頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


メソッド(関数)への返り値にNSArrayじゃない配列を使う

頭と尻尾はくれてやる! メソッド(関数)への引数にNSArrayじゃない配列を使う
↑この続きだよ。今回はメソッド(関数)の返り値にNSArrayじゃない配列を使うよ。

まずはObjective-Cっぽいメソッドの場合。
{
    float *array1 = [self makeArray1];
    NSLog(@"array1[0]=%f",array1[0]);
    NSLog(@"array1[1]=%f",array1[1]);
}

-(float *)makeArray1
{
    static float array[10];
    array[0]=1.23f;
    array[1]=2.34f;
    return array;
}
メソッド内での配列の宣言にstaticと書かないとダメみたい。staticだから次回このメソッドを呼び出すと前のが残っている、、、確かめると、確かに残ってる。なんだか気持ち悪いので次のようにする方が俺にはいいかも。
{
    float array2[10];
    [self makeArray2:array2];
    NSLog(@"array2[0]=%f",array2[0]);
    NSLog(@"array2[1]=%f",array2[1]);
}
-(void)makeArray2:(float *)array
{
    array[0] = 1.23;
    array[1] = 2.34;
}
単に呼び出し元で配列を宣言しといて、引数でメソッド側に渡してやり、そこで内容を記述するってだけなんだけどね。タイトルと違って返り値ないじゃないかって?細かいことはいいんだよ!

それじゃ次に、C言語の関数っぽく書くよ。
返り値に配列をもらう場合。
{
    float *array3 = makeArray3();
    NSLog(@"array3[0]=%f",array3[0]);
    NSLog(@"array3[1]=%f",array3[1]);
}

float *makeArray3()
{
    static float array[10];
    array[0] = 1.23;
    array[1] = 2.34;
    return array;
}
これも先ほどのと同様staticって付けないと動いてくれない。ローカル変数なんか返せるかボケ!ってとこなのかな。
これも同様に引数で結果が欲しい配列の入れ物だけを先に用意しておく方法もあり。
{
    float array4[10];
    makeArray4(array4);
    NSLog(@"array4[0]=%f",array4[0]);
    NSLog(@"array4[1]=%f",array4[1]);
}

void makeArray4(float array[])
//void makeArray4(float *array)//これも可
{
    array[0] = 1.23;
    array[1] = 2.34;
}
こんなレベルじゃ次のアプリのリリースはいつになるんだろうって感じだね、、、今までC言語をスルーしてきた報いだな、こりゃ。

<< 突然iAdが表示されなくなった件   TopPage  メソッド(関数)への引数にNSArrayじゃない配列を使う >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/651-5e2fc237




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad