2011-03-07 61 views
3

我有一个应该将两个对象和一个float作为参数的静态方法。对象的一切都很好,但我的浮动变量丢失了。这里是一个测试用例:Objective-C静态方法问题

+ (void) someFunctionWithSomething: (xmlNodePtr *) node { 
    CGFloat fsize = 0; 
    if (fsize == 0) { 
    fsize = 15.0f; 
    } 

    NSLog (@"size1: %f", fsize); // output is 15.00000 
    [MyClass getFontWithSize: fsize]; 
} 

+ (void) getFontWithSize: (CGFloat) fsize { 

    NSLog (@"size2: %f", fsize); // output is 0.00000 
} 

我的变量怎么突然变得零了?这可能与我从静态方法中调用静态方法的事实有关吗?我有一种感觉,这是一件非常简单的事情,我很想念这里。想法?

+1

这是导致错误的实际代码吗?因为你说你有一个方法需要两个对象和一个浮点数,但是你提供了一个只有一个对象而没有浮点数的方法。 – 2011-03-07 14:58:58

+1

我想你可能想看看现有的[Objective-C澄清; -/+和* var](http://stackoverflow.com/questions/406667/objective-c-clarification-and-var)问题。 :-) – 2011-03-07 15:00:22

+0

@middaparka,谢谢你的指针:) – Shade 2011-03-07 15:02:57

回答

1

检查你的头文件有getFontWithSize原型也符合你的定义:

+(void) getFontWithSize: (CGFloat) fsize; 

也许你有不同的东西在那里。

+1

谢谢,就是这样。我不知道跳过标题定义会产生这样的灾难性后果。谢谢你的回答:) – Shade 2011-03-07 15:00:47

+1

@Shade:那个警告你以前忽略了那个说“带有未定义签名的方法被假定为返回id并且将...当作参数”?这很重要:这意味着代码将查看指针寄存器(而不是浮点寄存器)的输入,并将其解释为指针。 – 2011-03-07 15:08:05

+0

@格拉汉李,我明白了。问题是我是Obj-C的初学者,正在与一个非常大的项目(185个课程)合作,这个项目有500多个编译警告。大部分代码不是我的,我已经停止关注警告。 – Shade 2011-03-07 15:11:15