Con*_*has 4 methods inheritance overriding objective-c objective-c-blocks
超类定义了一个方法,子类重新定义了该方法.唯一的区别是子类在块中添加一个参数,它本身就是方法的参数.
想象一下,我有一个类Collection和一个后代类List,它们在NSArray-style中定义了一个枚举方法.
@interface Collection : NSObject
- (void)enumerateObjectsUsingBlock: (void (^)(id obj))block;
@end
@interface List : Collection
- (void)enumerateObjectsUsingBlock: (void (^)(id obj, int index))block;
@end
Run Code Online (Sandbox Code Playgroud)
这是否有效(在所有平台上)并且是否符合标准?
我想它会工作,因为超类方法中的参数列表不受影响,而子类方法的用户会知道(可选地有一些类型转换)额外参数.
简而言之; 不,不要这样做.
更长:
它适用于大多数情况,但您必须努力避免编译器警告.Objective-C不支持方法的共变量或反变量声明(这就是instancetype创建原因的原因).由于块类型不同,方法参数类型也不同.
你也可以认为是拿,一个功能块或方法说(a),(A,B) , (a,b.c),(a,b,c,d)等...将在调用站点兼容.即你不能说实际上fun(a,b,c,d)在哪里fun,fun(a)并保证你会得到你所期望的.