0

他のいくつかのクラスのデリゲートとして機能するクラスを作成しました。しかし、問題があります。ARC は時期尚早にこのクラスを解放しており、デリゲート メッセージが送信されると、プログラムがクラッシュします。理由がわかりません... クラスを強に設定しました。このクラスがリリースされないようにするにはどうすればよいですか?

ViewController.h

Class *__strong class;

ViewController.m

class = [[Class alloc] init...];

Class.m

-(id)init {

    self = [super init];

    Object *object = [[Object alloc] init...];
    object.delegate = self;

    return self;

}

ログ

-[Object respondsToSelector:]: message sent to deallocated instance 0x11453f40
4

2 に答える 2

1

あなたはあなたの答えを持っていますが、私は私自身の小さなヒントでチャイムを鳴らすと思いました. 私は常に、dealloc でクラスを通知センターから削除します。

-(void) dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

これはやり過ぎかもしれませんが、私はできるだけ結合をなくすために通知パターンに大きく依存しています。ARC と組み合わされた通知の非同期性により、これはほぼ必須です。

于 2012-12-30T08:12:59.317 に答える
1

追加するメモリ修飾子の数に関係なく、関数が終了すると、ローカル変数の割り当てが解除されます。

于 2012-12-30T05:23:10.657 に答える