4

次の関数定義の最初の行に問題があります。

void draw(id shapes[], int count)
{   
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}   

コンパイルが失敗し、「オブジェクト配列パラメーターの意図した所有権を明示的に記述する必要があります」というエラーが表示されます。

エラーの正確な原因は何ですか? どうすれば修正できますか?

4

3 に答える 3

7

ARC環境でポインターの配列を渡しています。次のいずれかを指定する必要があります。

  • __強い
  • __弱い
  • __unsafe_unretained
  • __自動解放

同時に__unsafe_unretained渡す形状に何もしないと仮定すると、あなたの場合はうまくいくはずです。draw()

void draw(__unsafe_unretained id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
于 2012-04-29T04:22:38.747 に答える
1

私は同じ問題を抱えていました、そしてこれを読んで私は私の問題を解決しました、私はプロパティ__unsafe_unretainedで試しましたが、私にはうまくいきませんでした、コンパイラは私に示します、あなたは強い変数をunsafe_unretainedに渡そうとしています。したがって、__ strongを使用すると、本のサンプルで問題なく動作します。

void draw(__strong id shapes[], int count)
{
    for(int i = 0;i < count;i++) {
        id shape = shapes[i];
        [shape draw];
    }
}
于 2013-01-26T20:23:09.953 に答える