1

次のコードを使用してダングリング ポインターを作成しようとしています。

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"I am touched!");

    // bar is an instance variable defined by  NSString *bar;  in the interface
    if (!bar) {
        NSLog(@"bar is being init");
        bar = [NSString stringWithFormat:@"Hello I am %i", arc4random() % 1000];
        NSLog(@"bar is now %@", bar);
    } else {
        NSLog(@"bar is %@", bar);
    }
}

そのため、iPad 2 デバイス (シミュレーターではない) の 2 回目のタッチでプログラムを正常にクラッシュさせることができますが[bar retain];、割り当て行の後にa を追加してbar =、ダングリング ポインターがないことを確認しようとすると、アプリは起動できず、続行できません。表示:

com.mycompany.TryIOSAppLeak をブートストラップ サーバーに登録できませんでした。エラー: 不明なエラー コード。

これは通常、このプロセスの別のインスタンスがすでに実行されているか、デバッガーでハングしていることを意味します (lldb)。

もう一度やり直す方法はありますか?(iPad と iMac を再起動するか、Xcode を再起動する以外に)。

4

1 に答える 1

2

ああ、これは私によく起こります。再起動する前にクラッシュしたアプリを強制終了してみてください。アプリはデバイスでハングします。ただし、それが発生したら、デバイス/シミュレーターでアプリを削除し、デバイス/シミュレーターを再起動して、XCode を再起動します。非常に迷惑ですよね!または、スキームを編集してデバッガーを GDB に変更することもできます。あなたのコードとは何の関係もありません。

于 2012-05-14T06:30:32.517 に答える