我发现 [ ClassName alloc ] 和 [ self alloc ] 不等价的条件。我列出它以防其他人面临类似情况。
//Option 1
+ (NSInputStream *)streamWBlockWithArray:(NSArray *)dataArray
{ return [[[self alloc] initWithArray:dataArray] autorelease]; }
// Option 2
+ (NSInputStream *)streamBlockWithArray:(NSArray *)dataArray
{ return [[[Block alloc] initWithArray:dataArray] autorelease]; }
如果我使用选项 1,编译器会给出重复定义的编译器错误,initWithArray 的定义被标记为与 + [ NSArray initWithArray ] 的定义冲突。在我将 [ self alloc ] 替换为 [ Block alloc ] 后,编译器错误消失了。这可能只是一个编译器无法消除歧义,即使上下文看起来足够清楚。