对于冲突的类别方法没有警告

时间:2013-10-04 21:08:48

标签: ios objective-c compiler-construction linker

我正在运行XCode 4.6.3并尝试创建一个具有冲突类别方法的项目,如下所示。

//NSString+category1.h
@interface NSString (category1)

-(NSString*)foo;

@end

//NSString+category1.m
#import "NSString+category1.h"

@implementation NSString (category1)

-(NSString*)foo{
    return self;
}

@end


// NSString+category2.h
@interface NSString (category2)

-(NSString*)foo;

@end

//NSString+category2.m
#import "NSString+category2.h"

@implementation NSString (category2)

-(NSString*)foo{
    return self;
}

@end

XCode 4.6应该给我一些警告,但事实并非如此。是否需要设置特殊的编译器/链接器标志?

1 个答案:

答案 0 :(得分:0)

根据使用Objective-C编程指南中的Avoid Category Method Name Clashes

  

如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)中的另一个类别中的方法相同,则行为未定义为哪个方法实现在运行时使用。 ...

     

...为了避免未定义的行为,最好在框架类的类别中为方法名称添加前缀,就像您应该为自己的类的名称添加前缀一样。您可以选择使用用于类前缀的相同三个字母,但小写字母按照通常的方法名称约定,然后使用下划线,在方法名称的其余部分之前。

总而言之,我认为负担取决于开发人员以确保方法名称是唯一的。