¿Cómo utilizar correctamente generics en obj-c?

Con el nuevo xcode7 Apple introdujo generics y capacidad de nulidad para Objective-C ( guía de desarrollador )

Pero parece ser muy diferente de lo que tenemos rápido.

Nullability:

- (nonnull NSString *)something { return nil; } 

¡Esto debería generar una advertencia! E incluso puede asignar el valor de retorno de este método a una variable no nonnull como:

 //@property (copy, nonnull) NSString *name obj.name = [obj something]; 

Generics: mirando este ejemplo:

 @property (nonatomic, strong, nonnull) NSMutableArray <UIView *> *someViews; 

se genera una advertencia cuando se inserta algo diferente de una UIView en la matriz

 [self.someViews addObject:@"foobar"]; //<- this raises an error 

Pero no en este caso:

 self.someViews = [@[@"foobar"] mutableCopy]; 

ni en este caso:

 NSString *str = [self.someViews firstObject]; 

Entonces, la pregunta es: ¿estoy usando generics y nulabilidad de forma incorrecta o están muy lejos de la implementación de Swift?

 self.someViews = [@[@"foobar"] mutableCopy]; 

mutableCopy se henetworkinga de NSObject , donde se declara que devuelve id . NSArray no lo declara específicamente y NSArray no decide el tipo de devolución.

 NSString *str = [self.someViews firstObject]; 

Esto me da una advertencia.