I had a quick look at variance with Objective-C generics. Covariance and contravariance are supported. gist.github.com/douglashill/802ed825389cc5de6e9d