Objective-C Generics by protocol