Я обнаружил условие, при котором [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].Вероятно, это просто компилятор, который не может устранить неоднозначность, хотя контекст кажется достаточно ясным.