【问题标题】:Conflicting parameter type in implementation of NSInteger vs NSInteger*NSInteger 与 NSInteger * 实现中的参数类型冲突
【发布时间】:2014-12-26 20:03:36
【问题描述】:

有“实现中的参数类型冲突...”,如下图所示。此代码运行良好,但警告不会消失。有人可以解释这里发生了什么

在.h文件中

@property (nonatomic) NSInteger score;
@property (nonatomic) NSInteger topScore;

在.m文件中

-(void)setScore:(NSInteger *)score
{
    _score = score;
    scoreLabel.text = [[NSNumber numberWithInteger:(long)self.score] stringValue];

}

-(void)setTopScore:(NSInteger *)topScore
{
    _topScore = topScore;
    topScoreLabel.text = [[NSNumber numberWithInteger:(long)self.topScore] stringValue];

}

【问题讨论】:

  • 你为什么要投长?

标签: objective-c getter-setter nsnumber nsinteger


【解决方案1】:

这是因为NSInteger 是原始类型,而不是对象。它应该按值传递,而不是按指针传递,即不带星号:

-(void)setScore:(NSInteger)score {
    _score = score;
    scoreLabel.text = [[NSNumber numberWithInteger:(long)self.score] stringValue];
}

setTopScore: 方法也是如此。

【讨论】:

  • 更具体/准确的 NSInteger* 是指向 NSInteger 的指针;即内存地址。你可以传递指向原语的指针,但你还没有声明你的属性。
  • 在非原始类型的情况下,NSString 和 NSString* 是不同的类型(虽然 NSString 通常不是合法的类型),而 NSString* 和 NSString** 是不同的类型。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2010-12-28
  • 2012-10-19
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多