I sometimes see code where the delegate has a type of NSObject rather than id id<CustomDelegate> delegate; NSObject<CustomDelegate> *delegate; and when asked why I'm always told the same answer: "So that when using the delegate I can use the performSelector method" This …