I believe the answer to this question is that you have 2 different kinds of symbol. I believe the typedef is an object and you are trying to use it as a class symbol.
depending on the order of declaration you get different warnings suggesting as much:
typedef NSObject Foo;
@class Foo;
yields:
Redefinition of forward class 'Foo' of a typedef name of an object type is ignored
@class Foo;
typedef NSObject Foo;
yields:
Redefinition of 'Foo' as different kind of symbol