0

私は次のようにプログラムでUIButtonを追加する簡単なアプリケーションを持っています

    for(int i=0;i<[self.contentList count];i++)
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button addTarget:self action:@selector(buttonSelection:)forControlEvents:UIControlEventTouchDown];
        [button setTitle:[ [contentList objectAtIndex:i] valueForKey:@"nameKey"]  forState:UIControlStateNormal];
        button.tag=i+kButtonTagOffset;
        [self.view insertSubview:button atIndex:0];
       // [button release];

    }

次に、ビューのときにアクセスして、次のように向きを変更し、次のように位置を調整します

  for (int row = 0; row < Portrait_TILE_ROWS; ++row)
    {
        for (int col = 0; col < Portrait_TILE_COLUMNS; ++col)
        {
            int index = (row * Portrait_TILE_COLUMNS) + col;
            CGRect frame = CGRectMake(LandScape_TILE_MARGIN + col * (LandScape_TILE_MARGIN + LandScape_TILE_WIDTH),
                                      LandScape_TILE_MARGIN + row * (LandScape_TILE_MARGIN + LandScape_TILE_HEIGHT),
                                      LandScape_TILE_WIDTH, LandScape_TILE_HEIGHT);

            UIButton *tmb= (UIButton *)[self.view viewWithTag:index+kButtonTagOffset];
            if([tmb isKindOfClass:[UIButton class]]) //isKindOfClass
            {   
                [  [self.view viewWithTag:index+kButtonTagOffset] setFrame:frame];

            }

        }
    }

私の最初の質問は、サブビューに追加した後にUIBUttonを解放すると、なぜEXC_BAD_ACCESSエラーが発生し、シミュレータではなくデバイスでのみ発生するのかということです。サブビューに追加すると、オブジェクトの保持数が1つ増えて、後でアクセスすると思いました。そのエラーを発生させることはありませんか?

xcodeデバッガー内で、どのオブジェクトとそのEXC_BAD_ACCESS例外が発生したかをどのように把握できるか、コードの一部にコメントを付けるだけで把握できます。

ありがとうM

4

1 に答える 1

1

メモリ管理とカカオの命名規則の基本を読み直す必要があります。allocを呼び出したり、コピーしたり、保持したりしなかったため、リリースするのは正しくありません。そのコンストラクターは、自動解放されたオブジェクトを返します。この概念が難しい場合は、ARCに切り替えてください。

エラーが発生している行を特定することに関しては、Xcode4で-> 「実行>Objective-C例外で停止」ですか?

于 2012-07-26T06:12:39.937 に答える