0

私はこのコードを書きました:

NSAlert *alert = [NSAlert new];
objc_setAssociatedObject(alert, @"block", aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
if (![objc_getAssociatedObject(alert, @"block") isEqual:aBlock]) NSLog(@"failure");

ここで、aBlockvoid (^)(NSAlert *)上記のコードを呼び出す関数に渡されるブロックです。ここで、ブロックに外部変数が含まれていない場合__block、すべてが正常に実行されますが、そのような変数(たとえば、外部変数)を設定しようとすると__block NSString *string@"failure"メッセージが表示されます。私に何ができる?

4

1 に答える 1

3

あなたのコードは正しく動作しています。ブロックは必ずしもそれ自体のコピーと同じではありません — 実装に依存します。に単純化することができif (![aBlock isEqual:[aBlock copy]]) NSLog(@"Failure!")、同じ結果が得られるはずです。

于 2012-12-10T20:20:46.600 に答える