代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

Objective-C中作为成员变量的字节数组:为什么值不存在?

  •  0
  • Dan Rosenstark  · 技术社区  · 15 年前

    @interface :

    uint * theBytes;
    

    然后我有一个方法来检查数组的值。

    - (IBAction) checkNow {
     NSLog(@"now? %d %d %d", theBytes[0], theBytes[1], theBytes[2]);
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
     uint tryThis[3] = {72,2,244};
     theBytes = tryThis;
     [self checkNow];
    }
    

    checkNow 精细显示值。如果我打电话 稍后按下一个按钮,值就完全不同和奇怪了。

    我可以和你一起做 NSData 很容易,但我想用直数组。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Chuck    15 年前

    不能将本地数组分配给要在当前堆栈帧之后保留的指针。你必须使用动态记忆,从 malloc() 或者类似的功能。如果你想使用字节数组,你必须 malloc() memcpy() free() 每次要重新分配内存时,都会正确地分配内存。

    - (IBAction) checkNow {
     NSLog(@"now? %d %d %d", theBytes[0], theBytes[1], theBytes[2]);
    }
    
    - (void)viewDidLoad {
     [super viewDidLoad];
     uint tryThis[3] = {72,2,244};
     theBytes = malloc(3 * sizeof(uint));
     memcpy(theBytes, tryThis, 3 * sizeof(uint));
     [self checkNow];
    }
    
    // In order not to leak, you'll also need:
    
    - (void)dealloc {
      free(theBytes);
      [super dealloc];
    }