Objective-C static method problem
我有一个静态方法,它应该取两个对象和一个浮点作为参数。对象一切正常,但我的float变量丢失了。下面是一个测试用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| + (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
} |
为什么我的变量突然变为零?这是否与我从静态方法内部调用静态方法的事实有关?我有种感觉,这真的是我在这里错过的简单的东西。思想?
- 这是导致错误的实际代码吗?因为您说有一个方法接受两个对象和一个浮点,但是您提供了一个方法接受一个对象而不接受浮点。
- 我认为您可能还需要阅读一下现有的Objective-C澄清;-/+和*var问题。-)
- @Middaparka,谢谢你的指点:)
- @PhilippJaquet,这无关紧要,正如我在问题中提到的,这段代码复制了这个问题。不管怎样,我已经有了答案。
- @shade:不,不是-也不是,不是。我试图重现您的错误,但无法重现,因为如果正确地集成了代码本身,代码本身就可以工作(即在.h文件中使用方法签名)。
- 关于术语的一点:这些不是静态方法,而是类方法。
- @Jeremyp,谢谢你的评论:)我对Objective-C比较陌生,有些地方有时有点雾。
检查您的头文件是否具有与您的定义匹配的getFontWithSize原型:
1
| +(void) getFontWithSize: (CGFloat) fsize; |
也许你那里有些不同的东西。
- 谢谢,就是这样。我不知道跳过头定义会产生如此灾难性的后果。感谢您的回答:)
- @shade:之前忽略的警告是"假定具有未定义签名的方法返回ID并获取…作为争论"?这很重要:这意味着代码将查看其输入的指针寄存器(而不是浮点寄存器),并将其解释为指针。
- @格雷厄姆·李,我明白了。事实上,我是obj-c的初学者,正在处理一个非常大的项目(185个类),它有500多个编译警告。大多数代码不是我的,我已经不再关注警告。
- @阴影:没问题!很高兴能帮上忙。这不是一个明显的问题。我认为同样的事情会发生在良好的老平原C+++对这些事情更严格…