协议可以在某种程度上提供匿名类型,当接口背后有多个不同的实现类,又不想声明指定哪个类时,可以使用这种方法.因为有时候这些类会变,有时候又无法容纳于标准的类继承体系中,不能以某个公共基类来统一标示.
在一些情况下,对象的类型并不重要,重要的是对象有没有实现某些方法,可以用"匿名类型"来表达该概念.
在开发后续版本时,如果之前使用了"匿名对象"概念,则无需改变公有API,即可切换实现类.
如果想要隐藏API中的实现细节,也可以使用"匿名对象".
-(void)setObject:(id)object forKey:(id<NSCopying>)key 这个方法中,key就可以视为"匿名对象",它可以是任何类型,只要遵守NSopying协议就好.