Objective c 数组中的值会自行更改
这可能是一个彻头彻尾的问题,但我自己似乎无法解决这个问题。我搜索了这里和谷歌,但没有任何运气 我有一个有名字的类,比如“logme”。我在.h文件中实现了一个float*floaters,并在.m文件中合成了一个属性。.m文件中有两个方法method1和method2。当我从viewcontroller执行method1时,它使浮动变量成为一个带有一些值的数组。我记录它们,以检查它们是否正确。之后,我执行method2,它只记录相同的数组,但现在数组中的值完全不同 logme.hObjective c 数组中的值会自行更改,objective-c,arrays,Objective C,Arrays,这可能是一个彻头彻尾的问题,但我自己似乎无法解决这个问题。我搜索了这里和谷歌,但没有任何运气 我有一个有名字的类,比如“logme”。我在.h文件中实现了一个float*floaters,并在.m文件中合成了一个属性。.m文件中有两个方法method1和method2。当我从viewcontroller执行method1时,它使浮动变量成为一个带有一些值的数组。我记录它们,以检查它们是否正确。之后,我执行method2,它只记录相同的数组,但现在数组中的值完全不同 logme.h @interf
@interface Logme : NSObject {
float *floaters;
}
-(void)method1;
-(void)method2;
洛格姆
@implementation Logme
-(void)method1 {
floaters = (float[8]) {
1.0f, 2.0f,
3.0f, 4.0f,
6.0f, 5.0f,
7.0f, 8.0f,
};
for (int i = 0; i < 8; i++) {
NSLog(@"%f", floaters[i]);
}
}
-(void)method2 {
for (int i = 0; i < 8; i++) {
NSLog(@"%f", floaters[i]);
}
}
@end
结果:
NSLog from method1:
1.000000
2.000000
3.000000
4.000000
6.000000
5.000000
7.000000
8.000000
NSLog from method2:
0.000000
-1.998885
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
- 对不起。我在和这个4格系统作战。它不允许我添加.m文件代码。终于在这里找到了:)
- 直接的答案是@HotLicks在评论中给出的。我想我应该多解释一下
当您在方法中有类似的内容时:
- (void)someMethod {
float *numbers = (float[8]) {
1.0f, 2.0f,
3.0f, 4.0f,
6.0f, 5.0f,
7.0f, 8.0f,
};
} // <-- end of scope for these values
-(void)someMethod{
浮点*数字=(浮点[8]){
1.0f,2.0f,
3.0f,4.0f,
6.0华氏度,5.0华氏度,
7.0华氏度,8.0华氏度,
};
}//您正在为堆栈中的内存块分配一个指针,这意味着当您退出mrthod1时,内存将被释放。method1之后打印的值是偶然的,也可能发生内存未被触及的情况,但堆栈通常在每次方法调用时都会发生变化,这就是您的情况
选择1
您使用的是浮点数作为数组,因此将其声明为数组,它将拥有自己的存储:
@interface Logme : NSObject {
float floaters[8];
}
-(void)method1 {
for(int i=0; i<8;i++)
floaters[i]=i+1;
for (int i = 0; i < 8; i++) {
NSLog(@"%f", floaters[i]);
}
@接口日志:NSObject{
浮球[8];
}
-(无效)方法1{
对于(int i=0;i)如果没有复制问题的(最小)代码,您的问题将无法回答。您可以添加method1和method2实现吗?它是如何变化的?您是否为Logme创建了不同的对象?您如何调用method1和method2?您可以发布吗?floaters=(float[8])…
并没有创建一个持久数组--它会“噗”一声当方法返回时。为什么不使用NSArray或NSMutableArray?它们比C更强大、更简单array@userXXXX你需要阅读和学习很多。我非常感谢你用例子来解释。我理解我做错了什么,以及如何正确地做。
@interface Logme : NSObject {
float floaters[8];
}
-(void)method1 {
for(int i=0; i<8;i++)
floaters[i]=i+1;
for (int i = 0; i < 8; i++) {
NSLog(@"%f", floaters[i]);
}
-(void)method1 {
floaters=(float*)malloc(8*sizeof(float));
for(int i=0; i<8; i++)
floaters[i]=i+1;
for (int i = 0; i < 8; i++) {
NSLog(@"%f", floaters[i]);
}