создает новый Car
объект с именем myCar
Это не совсем верно. Он должен «создавать новый объект Car
и присваивает его переменной с именем myCar
».
Но если это: Car *myCar = [[DifferentCar alloc] init];
Что будет создано?
Я предполагаю, что DifferentCar
подкласс Car
. Будет создан экземпляр DifferentCar
и назначен переменной myCar
. Статический тип этой переменной будет Car
, но его тип времени выполнения будет DifferentCar
(или один из его подклассов, если реализация решит сделать замену).
какой Xx
есть?
В вызове выше Xx
определяет тип объекта, к которому alloc
сообщение будет отправлено, в конечном счете решить, тип создаваемого объекта. Обратите внимание, что, так как вы сразу вызываете init
, объект, возвращенный от вызова, может отличаться от объекта, отправляемого в вызов.
Твердый ответ. Чтобы быть ясным, тип 'myCar' - это' Car * ', а не' Car'. – Caleb
@ Caleb Ну, поскольку эта звездочка является скорее «синтаксической необходимостью» Objective-C (то есть, язык делает невозможным обращение к объектам через переменные без звездочек), я не дал ему описать тип переменной. – dasblinkenlight
Я бы обычно не придирался к этому - это удобная стенография, пока все знают, что вы имеете в виду. Начинающие не всегда понимают разницу между объектом и указателем, поэтому я считаю, что лучше всего быть явным в таких случаях, как этот. Я не хотел вас точно исправлять, просто чтобы уточнить для ОП. – Caleb