Я читаю через Марка Дэлримпл-х Learn Objective-C на Mac (только в главе, посвященной Протоколам, так до сих пор относительно newbish) и пытается понять что-то:Зачем использовать [ClassName alloc] вместо [[self class] alloc]?
Почему бы вам когда-либо ссылаться на класс, свое имя? Если бы я имел класс с именем Foo
, почему я никогда не хочу писать, скажем,
[[Foo alloc] init]
и не
[[[self class] alloc] init]
Если бы я имел подклассов бар, не первый вариант аннулированию меня написание
[[Bar alloc] init]
в то время как второй вариант позволит это? Когда первый вариант будет лучше?
Просто примечание здесь для потомков. Учитывая ответы ниже и сценарии, о которых они говорят, ссылка на «[self class]» в [[[self class] alloc] init] 'не нужна, так как «я» уже ссылается на объект класса. Единственный сценарий, в котором эта строка может использоваться как есть, - это если вы создаете еще один объект класса Foo в методе экземпляра Foo - say '- (void) createAnotherFancyObject;' вроде так "Foo * bar = [[[self class] alloc] init]" –