Objective-C 类别

标签 objective-c ios polymorphism objective-c-category

<分区>

Possible Duplicate:
What happens if two ObjC categories override the same method?

我在 NSString 类上有两个类别,如下所示:

//第一类

#import "NSString+MyCategory1.h"

@implementation NSString (MyCategory1)

-(void)myMethod{
    NSLog(@"this is my method from category 1");
}

@end

//第二类

#import "NSString+MyCategory2.h"

@implementation NSString (MyCategory2)

-(void)myMethod{
    NSLog(@"this is my method from category 2");
}

@end

但下面的主要方法总是从 MyCategory1 调用 myMethod,即使在相同的导入已被注释掉之后也是如此。

#import <Foundation/Foundation.h>
//#import "NSString+MyCategory1.h"
#import "NSString+MyCategory2.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        [[[NSString alloc]init] myMethod];

    }
    return 0;
}

请任何人解释这种行为以及这种行为在实践中如何有用。

最佳答案

我认为这表明您不应该在冲突的类别中使用方法。

我的(半知情的)猜测是哪个方法被调用到应用程序的编译方式,所以它不是您可以在运行时影响的东西。它在实践中并没有真正的用处,它只是……发生了什么。

至于为什么会发生这种情况,头文件没有说明调用该方法时要做什么,只是说明它存在一个实现。在你的情况下,它确实存在。它恰好不是你想要的。

关于Objective-C 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289646/

上一篇:objective-c - 在 iOS 中设置标题

下一篇:objective-c - 分配字符串时发送到实例的无法识别的选择器

相关文章:

iphone - 通过 iphone 应用程序付款

ios - CocoaPods:构建成功但颜色为红色

java - “overriding” java中具有向上转换调用的私有(private)方法

c++ - 我在理解继承和让多个类协同工作时遇到问题?

c++ - 如何实现包含不同类型单元格的表格?

ios - UIVIew animateWithDuration 线性?

objective-c - chatDidReceiveMessage 方法未调用 QuickBlox

objective-c - Core Data 应用程序中的多个 View 和源列表

ios - 应用内购买无效

ios - 使用 Alamofire 从图库上传带有参数和标题的图像