单击添加错误编号的按钮,向变量添加+1

Jon*_*rft 1 objective-c nsinteger ios

我是Objective-c的新手,可能很容易解决,但无法在任何地方找到答案....

每次用户点击按钮时,我都会尝试为变量添加+1,但不是添加+1,而是添加+4

- (IBAction)addNewSet:(UIButton *)sender {
    NSLog(@"%i",_sliderTag);
    _sliderTag += 1;
   NSLog(@"ADD NEW    %i",_sliderTag);
}
Run Code Online (Sandbox Code Playgroud)

_sliderTag已经是NSInteger:

@property (nonatomic,assign) NSInteger* sliderTag;
Run Code Online (Sandbox Code Playgroud)

第一次NSLog打印0和第二次打印后执行打印4.谁有人解释为什么?它是打印0第一个,因为此变量的点是设置标签的计数器.

Cal*_*leb 6

听起来像是_sliderTag一个指向大小为4个字节的类型的指针.将1添加到指针会使其增加所指向类型的大小.以下两个例子说明了这些差异:

NSInteger foo = 0;
foo += 1;
NSLog(@"result: foo = %d", foo);    // result: foo = 1

NSInteger *bar = 0;                 // note the '*'
bar += 1;
NSLog(@"result: bar = %d", bar);    // result: bar = 4
Run Code Online (Sandbox Code Playgroud)

  • 这是因为你将它声明为指针,`NSInteger*`,删除星号.`sizeof(*_ sliderTag)`恰好在您的系统上为4,并且将指针增加1会导致打印地址为4. (2认同)
  • @JonathanThurft - sliderTag是*不是NSInteger,它是指向NSInteger的指针.完全不同的事情.(在Objective-C中进行任何更远的编程之前,您需要了解一些不同之处.) (2认同)