1

私はこのようなことをしています:

@protocol CallbackDelegate
-(void) performCallback;
@end

@interface MyObject : NSObject {
   id<CallbackDelegate> delegate;
}

-(void)AsyncFuncCall;

@end

@property (nonatomic, assign) id<CallbackDelegate> *delegate;

所有するコードはMyObject、デリゲートを設定してコールバック関数を受け取ります。

MyObject *myobject = [[MyOject alloc] init];
myobject.delegate = x;

次にMyObject、非同期関数呼び出しの結果として、デリゲートにシグナルを返します。

-(void)AsyncFuncCall {
   [delegate performCallback];
}

有効なメモリ クリーンアップの結果としてデリゲートが解放された場合を除いて、ほとんどの場合、すべてがうまく機能しているようです。この場合、コールバックを実行したくないだけです

デリゲートが有効かどうかを確認する最良の方法を知っている人はいますか?

私は次のようなあらゆる種類のことを試しました:

if (delegate != nil) {
   ...
}

運がない。

4

1 に答える 1

4

これを避けるために、デリゲートは、その dealloc で myObject のデリゲート プロパティを nil アウトする必要があります。

- (void) dealloc {
  if (myObject.delegate == self) myObject.delegate = nil;
  [super dealloc];
}

または、お勧めしませんが、デリゲートを保持することもできます。ただし、これにより保持サイクルが発生する可能性があります。

于 2008-12-30T13:36:48.480 に答える