0

我写了这段代码:

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

whereaBlockvoid (^)(NSAlert *)传递给调用上述代码的函数的块。现在:如果块不包含任何外部__block变量,一切正常,但如果它试图设置一个这样的变量(例如,一个 external __block NSString *string)我得到@"failure"消息。我能做些什么?

4

1 回答 1

3

您的代码工作正常。一个块不一定等于它自己的副本——它是依赖于实现的。您可以将其简化为,if (![aBlock isEqual:[aBlock copy]]) NSLog(@"Failure!")并且应该得到相同的结果。

于 2012-12-10T20:20:46.600 回答