Ios 使用self vs类名
摘自CS193P PlayingCard.MIos 使用self vs类名,ios,objective-c,Ios,Objective C,摘自CS193P PlayingCard.M + (NSArray *)rankStrings { return @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K"]; } +(NSUInteger)maxRank{ return [[self rankStrings] count]-1; } -(void)setRank:(NSUInteger)rank { if(rank &
+ (NSArray *)rankStrings
{
return @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K"];
}
+(NSUInteger)maxRank{
return [[self rankStrings] count]-1;
}
-(void)setRank:(NSUInteger)rank
{
if(rank <= [PlayingCard maxRank])
{
_rank = rank;
}
}
+(NSArray*)rankStrings
{
返回[?]、“A”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“J”、“Q”、“K”];
}
+(整数)maxRank{
返回[[self rankStrings]计数]-1;
}
-(void)setRank:(整数)秩
{
如果(rank如果有人对您的类进行子类化,则差异可能会很大。如果他们这样做,并覆盖您的maxRank
函数,则新定义将在子类中使用,而不是在基类中定义的定义。如果您想强制子类使用bass类的maxRank
定义,则使用class name,否则,使用self
当有人对你的playernadd
类进行子类化时,差异会变得显著。最好不要硬编码类名,除非你有很好的理由这么做。你的意思是当子类选择重写rankStrings
时,在超类中使用self
将保持避免重新实现+maxRank
?这是类方法和实例方法之间的一个简单区别。因此,如果他们更改子类中的rankstring
数组,调用maxRank
仍然会给他们PlayingCard
rankstring
?不,如果maxRank
获得rankstring
使用[自排列串]
。如果它使用[播放卡片排列串]
,则是。
-(void)setRank:(NSUInteger)rank
{
if(rank <= [self maxRank])
{
_rank = rank;
}
}