摘自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 <= [PlayingCard maxRank])
{
_rank = rank;
}
}
据我所知,在第三种方法中,你不能说
-(void)setRank:(NSUInteger)rank
{
if(rank <= [self maxRank])
{
_rank = rank;
}
}
因为它是一个实例方法,所以self
将引用一个不能使用maxRank
方法的实例对象。
但是在maxRank
实施中,不会
return [[PlayingCard rankStrings] count]-1;
与
return [[self rankStrings] count]-1;
有什么区别?
答案 0 :(得分:2)
如果某人为您的班级做了子类,那么差异可能很大。如果他们这样做,并覆盖你的maxRank
函数,那么新定义将在子类中使用,而不是在基类中定义的定义。如果要强制子类使用bass类的maxRank
定义,则使用类名,否则使用self
。