objective-c – 如果两个ObjC类别覆盖相同的方法会发生什么?

objective-c – 如果两个ObjC类别覆盖相同的方法会发生什么?,第1张

概述我知道几个关于Objective-C类别的规则: Category methods should not override existing methods (class or instance) Two different categories implementing the same method for the same class will result in undefined beh 我知道几个关于Objective-C类别的规则:

category methods should not overrIDe existing methods (class or instance) Two different categorIEs implementing the same method for the same class will result in undefined behavior

我想知道当我在同一类别中覆盖我自己的类别方法之一时,会发生什么.例如:

@interface NSVIEw (MyExtensions)- (voID)foo; // NSVIEw category implementation@end@interface MyClass : NSVIEw{ }@end@interface MyClass (MyExtensions)- (voID)foo; // MyClass category implementation@end

定义了这些接口,当我运行以下代码时,将执行哪种方法?

MyClass * instance = [[MyClass alloc] initWith...];[instance foo];[instance release];

注意:使用我的编译器,MyClass实现是优先的,但我不确定是否保证发生,或者仅仅是一种特定的未定义行为.

解决方法 每个类的每个方法都有一个实现.类别添加或替换特定类的方法.这意味着你看到的行为,MyClass有一个foo,NSVIEw有另一个foo,是很好的定义. MyClass的任何实例都将具有不同于不是MyClass的NSVIEw的任何实例的foo,就像在主实现中定义了foo而不是类别一样.甚至可以从MyClass调用[super foo]来访问为NSVIEw定义的foo. 总结

以上是内存溢出为你收集整理的objective-c – 如果两个ObjC类别覆盖相同的方法会发生什么?全部内容,希望文章能够帮你解决objective-c – 如果两个ObjC类别覆盖相同的方法会发生什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1028032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存