質問

私は、以下の方法:

-(void)testAPIModule {
    self.requests = [NSMutableArray array];
    NSLog(@"making arrays");
    /*(A)*/ id array1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithFloat:2], nil];
    /*(B)*/ id array2 = [NSArray arrayWithObjects:[NSNumber numberWithInt:4], [NSNumber numberWithInt:5]];
    NSLog(@"made array=%@",array2);

    for( ServerRequest *req in self.requests ) {
        [Networker sendRequest:req withDelegate:self];
        [req release];
    }
}

このコードが実行されます。

しかし、私がコメントアウトライン(A)または削除す"と、nil"を、これまでの取得 EXC_BAD_ACCESS エラーがライン(B)!によるデバッガ、エラーが発生しCFRetainの+[NSArray arrayWithObjects]内蔵のコンストラクタです。

まだコメントアウトライン(A)とコメントのために(...)は、ループコードは実行を通じての研究"に関するお問合せ

これは非常に想定外。何してるわけではありませんので間違った線路(B)?とかを全く異なる配列にライン(A)の方法を実行すか?というコメントのために(...)ループ防止のためエラーライン(B)と前です。

できる人にその理由を説明です。少なくとも)の括弧の中身は研究者のためのデバッグ?しかし、私は証明された方法のみに走り回る"自己"が有効になります。

役に立ちましたか?

解決

使用時に便利なメソッド arrayWithObjects, ばnilを指定して最後の要素となります。

書類"と言ってい

arrayWithObjects:

を作成し、返します配列を含むオブジェクト引数リスト。

+ (id)arrayWithObjects: (id)firstObj, ... 

パラメータ

firstObj,...
カンマで区切られたリストのオブジェ終無料。

他のヒント

あなたの他の警告フラグに-Wformatを追加し、コンパイラはあなたのために不足しているnilをピックアップします。

要素がすべてのスタック上の同じ位置にあるので、

二つ目は最初の後に動作します。だから、最初の1からの復帰後、スタックはまだ[NSNumber numberWithInt:1]へのポインタ、[NSNumber numberWithFloat:2]へのポインタとnilを含んでいる(と自動解放プールがまだ排出されていないので、これらのポインタでもまだ有効です!)。 2番目の1を呼び出すと、nilをせずに、それはスタック上のポインタを置き換えますが、ゼロは変更されません。 2番目の試みは、3つの数字を持っていた場合、それはおそらく同じようにクラッシュしました3番目の数字は次だったものは何でもその後、nilを上書きしているであろうから、残されることになる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top