// Matching properties @interface I1 { } - (int)getProp2; - (void)setProp2:(int)value; @property (readonly) int Prop1; @property (getter = getProp2, setter = setProp2:) int Prop2; @end // Mismatched property @interface I2 @property (readonly) int Prop1; @end // Properties with implementations @interface I3 { int ivar1; int ivar2; int ivar3; int Prop4; } @property int Prop1; @property int Prop2; @property int Prop3; @property int Prop4; @end @implementation I3 @synthesize Prop2 = ivar2; @synthesize Prop1 = ivar1; @synthesize Prop3 = ivar3; @synthesize Prop4 = Prop4; @end