Где разница между [MyClass alloc] и [[self class] alloc]?

Есть ли веская причина, почему я не должен делать что-то подобное? Пример:

У меня есть класс MyClass. Там у меня есть эта реализация:

- (id)copyWithZone:(NSZone*)zone {
 MyClass *copy = [[MyClass allocWithZone:zone] init];
 copy.someproperty = [[self.someproperty copy] autorelease];
 return copy;
}

Вместо этого я нашел фрагмент, который выглядит так:

- (id)copyWithZone:(NSZone*)zone {
 MyClass *copy = [[[self class] allocWithZone:zone] init];
 copy.someproperty = [[self.someproperty copy] autorelease];
 return copy;
}

Разница в том, что первое просто использует имя, если его собственный класс по-человечески читается, как если бы это был какой-либо другой класс. А второй спрашивает себя, для какого класса. Разве это имеет значение или оба полностью подходят для использования в этом случае?

1 ответ

Если вы подклассом MyClass, то второй пример -copyWithZone: возвращает экземпляр подкласса. В первом примере нет, он возвращает экземпляр MyClass.

licensed under cc by-sa 3.0 with attribution.