Во второй главе своей книги по программированию для iOS Джо Конуэй описывает использование «self» в методах класса в случае создания подклассов.Я понимаю эту концепцию и у меня есть вопрос о подклассе.
Справочная информация: Мы создали класс Possession, метод класса + randomPossession которого выглядит следующим образом:
+(id)randomPossession
{
NSArray *randomAdjectiveList = [NSArray arrayWithObjects:@"Fluffy", @"Rusty", @"Shiny", nil];
NSArray *randomNounList = [NSArray arrayWithObjects:@"Bear", @"Spork", @"Mac", nil];
unsigned long adjectiveIndex = rand() % [randomAdjectiveList count];
unsigned long nounIndex = rand() % [randomNounList count];
NSString *randomName = [NSString stringWithFormat:@"%@ %@", [randomAdjectiveList objectAtIndex:adjectiveIndex], [randomNounList objectAtIndex:nounIndex]];
int randomValue = rand() % 100;
NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",
'0' + rand() % 10,
'A' + rand() % 10,
'0' + rand() % 10,
'A' + rand() % 10,
'0' + rand() % 10];
Possession *newPossession = [[self alloc] initWithPossessionName:randomName valueInDollars:randomValue serialNumber:randomSerialNumber];
return [newPossession autorelease];
}
Я знаю, чтовозвращаемое значение должно действительно иметь тип id, такой, чтобы id newPossession = ...
Я переклассифицировал Possession и создал класс с именем BallGlove, который включал новый iVar, brandName, NSString *
I overdord+ randomPossession в BallGlove выглядит следующим образом:
+(id)randomPossession
{
BallGlove *myGlove = [super randomPossession];
NSArray *brandNames = [NSArray arrayWithObjects:@"Rawlings", @"Mizuno", @"Wilson", nil];
unsigned long randomNameIndex = rand() % [brandNames count];
[myGlove setBrandName:[brandNames objectAtIndex:randomNameIndex]];
NSLog(@"myGlove is of type class: %@", [self class]);
return myGlove;
}
Мой вопрос таков: является ли способ, которым я переопределил этот метод класса, приемлемым и приемлемым для сообщества (т. е. параллельный формат -init путем захвата супер реализациив переменной, соответствующим образом управляйте переменной и затем верните ее? Мой вывод показывает, что возвращенный объект является экземпляром BallGlove, однако я был заинтересован в приемлемой реализации. Заранее спасибо.