1
Car *myCar = [[Car alloc] init];
創建名爲myCar
的新對象Car
。但如果是:創建對象
Car *myCar = [[DifferentCar alloc] init];
會創建什麼?我知道[[Xx alloc] init];
是用於創建一個新對象,但是Xx在那裏?
Car *myCar = [[Car alloc] init];
創建名爲myCar
的新對象Car
。但如果是:創建對象
Car *myCar = [[DifferentCar alloc] init];
會創建什麼?我知道[[Xx alloc] init];
是用於創建一個新對象,但是Xx在那裏?
創建了一個名爲
myCar
這是不完全正確了新的Car
對象。它應該是「創建一個新的Car
對象,並將其分配給名爲myCar
的變量」。
但是,如果是:
Car *myCar = [[DifferentCar alloc] init];
會創建什麼?
我假設DifferentCar
是Car
的子類。將創建一個DifferentCar
的實例,並將其分配給名爲myCar
的變量。該變量的靜態類型爲Car
,但其運行時類型爲DifferentCar
(或其中一個子類,如果實現選擇進行替換)。
什麼
Xx
在那裏?
在上述Xx
呼叫確定物體到其上alloc
消息將被髮送,並最終決定所創建的對象的類型的類型。請注意,由於您立即致電init
,從呼叫返回的對象可能與發送到呼叫的對象不同。
確定的答案。不過要清楚的是,'myCar'的類型是'Car *',而不是'Car'。 – Caleb 2015-02-10 18:08:39
@Caleb好吧,由於星號更像是Objective-C的「語法必要性」(即語言無法通過變量引用變量而不用星號來引用對象),因此我不再描述變量的類型。 – dasblinkenlight 2015-02-10 18:19:40
我通常不會這麼說 - 只要大家都知道你的意思,這是一個方便的速記。不過,初學者並不總是清楚對象和指針之間的區別,所以我認爲最好在這個例子中明確指出。我不是故意糾正你的,只是爲了澄清OP。 – Caleb 2015-02-10 18:24:36