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 metho