奇怪的目标C bug,属性不区分大小写?

时间:2013-02-01 02:53:18

标签: objective-c

我有两个属性“M”和“m”,这不是我所知道的最好的编码风格,但是请耐心等待。在init方法中对这些属性的赋值无法正常运行。这是完整的代码:

#import "AppDelegate.h"

@interface Foo : NSObject
@property (nonatomic, assign) int M;
@property (nonatomic, assign) int m;
- (id)initWithM:(int)M m:(int)m;
@end

@implementation Foo

- (id)initWithM:(int)M m:(int)m {
    if((self = [super init])) {
        self.M = M;
        printf("M = %d %d\n", M, self.M);
        self.m = m;
        printf("M = %d %d\n", M, self.M);
        printf("m = %d %d\n", m, self.m);
    }
    return self;
}
@end

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    Foo *f = [[Foo alloc] initWithM:2 m:1];
}
@end

以下是printf的输出:

M = 2 2
M = 2 1
m = 1 0

如果我将“M”更改为“BAR”并将“m”更改为“bar”,则可以正常工作。除了作为编译器错误之外,还有其他解释吗?

感谢。

1 个答案:

答案 0 :(得分:12)

@property int M;
@property int m;

都创建

- (void)setM:(int)

如果你真的想同时拥有mM属性(你绝对不应该),你可以使用

@property int M;
@property (setter = setLowerCaseM:, getter = lowerCaseM)int m;