// Matches @interface I1 { int ivar1; } @end // Matches @interface I2 : I1 { float ivar2; } @end // Ivar mismatch @interface I3 { int ivar1; float ivar2; } @end // Superclass mismatch @interface I4 : I1 { } @end // Methods match @interface I5 + (float)bar; - (int)foo; @end // Method mismatch @interface I6 + (float)foo; @end // Method mismatch @interface I7 - (int)foo; + (int)bar:(float)x; @end // Method mismatch @interface I8 - (int)foo; + (int)bar:(float)x, ...; @end // Matching protocol @protocol P0 + (int)foo; - (int)bar:(float)x; @end // Protocol with mismatching method @protocol P1 + (int)foo; - (int)bar:(double)x; @end // Interface with protocol @interface I9 <P0> + (int)foo; - (int)bar:(float)x; @end // Protocol with protocol @protocol P2 <P0> - (float)wibble:(int)a1 second:(int)a2; @end // Forward-declared interface @class I10; @interface I12 @end @interface I11 @end // Forward-declared protocols @protocol P3, P4; @protocol P5 - (double)honk:(int)a; @end // Interface with implementation @interface I13 @end @implementation I13 @end @interface I13b @end @implementation I13b @end // Implementation by itself @implementation I14 : I12 @end @implementation I15 : I11 @end