Playing around with Objective-C delegates and some metaprogramming