我写了这段代码:
NSAlert *alert = [NSAlert new];
objc_setAssociatedObject(alert, @"block", aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
if (![objc_getAssociatedObject(alert, @"block") isEqual:aBlock]) NSLog(@"failure");
其中aBlock
是传递给调用上面代码的函数的void (^)(NSAlert *)
块。现在:如果块不包含任何外部__block
变量,一切正常,但如果它尝试设置这样的变量(例如,外部__block NSString *string
),我得到{{1} } 信息。我该怎么办?
答案 0 :(得分:3)
您的代码运行正常。块不一定等于它自身的副本 - 它依赖于实现。您可以将其简化为if (![aBlock isEqual:[aBlock copy]]) NSLog(@"Failure!")
,您应该得到相同的结果。