Objective c NSInteger与NSInteger实现中的参数类型冲突*

Objective c NSInteger与NSInteger实现中的参数类型冲突*,objective-c,getter-setter,nsnumber,nsinteger,Objective C,Getter Setter,Nsnumber,Nsinteger,如下图所示,存在“实现中的参数类型冲突…”。此代码运行良好,但警告不会消失。有人能解释一下这是怎么回事吗 在.h文件中 @property (nonatomic) NSInteger score; @property (nonatomic) NSInteger topScore; 在.m文件中 -(void)setScore:(NSInteger *)score { _score = score; scoreLabel.text = [[NSNumber numberWith

如下图所示,存在“实现中的参数类型冲突…”。此代码运行良好,但警告不会消失。有人能解释一下这是怎么回事吗

在.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];

}

这是因为
NSInteger
是一种基本类型,而不是对象。它应该通过值传递,而不是通过指针传递,即不带星号:

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

setTopScore:
方法也是如此。

更具体/准确地说,NSInteger*是指向NSInteger的指针;i、 e.内存地址。您可以传递指向基元的指针,但尚未声明属性。对于非基元类型,NSString和NSString*是不同的类型(尽管NSString通常不是合法类型),NSString*和NSString**是不同的类型。为什么要强制转换为long?