2015-02-10 2 views
1
Car *myCar = [[Car alloc] init]; 

создает новый объект Car с именем myCar. Но если это так:Создание объектов

Car *myCar = [[DifferentCar alloc] init]; 

Что будет создано? Я знаю, что [[Xx alloc] init]; предназначен для создания нового объекта, но что такое Xx?

ответ

2

создает новый Car объект с именем myCar

Это не совсем верно. Он должен «создавать новый объект Car и присваивает его переменной с именем myCar».

Но если это: Car *myCar = [[DifferentCar alloc] init]; Что будет создано?

Я предполагаю, что DifferentCar подкласс Car. Будет создан экземпляр DifferentCar и назначен переменной myCar. Статический тип этой переменной будет Car, но его тип времени выполнения будет DifferentCar (или один из его подклассов, если реализация решит сделать замену).

какой Xx есть?

В вызове выше Xx определяет тип объекта, к которому alloc сообщение будет отправлено, в конечном счете решить, тип создаваемого объекта. Обратите внимание, что, так как вы сразу вызываете init, объект, возвращенный от вызова, может отличаться от объекта, отправляемого в вызов.

+0

Твердый ответ. Чтобы быть ясным, тип 'myCar' - это' Car * ', а не' Car'. – Caleb

+0

@ Caleb Ну, поскольку эта звездочка является скорее «синтаксической необходимостью» Objective-C (то есть, язык делает невозможным обращение к объектам через переменные без звездочек), я не дал ему описать тип переменной. – dasblinkenlight

+0

Я бы обычно не придирался к этому - это удобная стенография, пока все знают, что вы имеете в виду. Начинающие не всегда понимают разницу между объектом и указателем, поэтому я считаю, что лучше всего быть явным в таких случаях, как этот. Я не хотел вас точно исправлять, просто чтобы уточнить для ОП. – Caleb

Смежные вопросы