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

創建名爲myCar的新對象Car。但如果是:創建對象

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

會創建什麼?我知道[[Xx alloc] init];是用於創建一個新對象,但是Xx在那裏?

回答

2

創建了一個名爲myCar

這是不完全正確了新的Car對象。它應該是「創建一個新的Car對象,並將其分配給名爲myCar的變量」。

但是,如果是:Car *myCar = [[DifferentCar alloc] init];會創建什麼?

我假設DifferentCarCar的子類。將創建一個DifferentCar的實例,並將其分配給名爲myCar的變量。該變量的靜態類型爲Car,但其運行時類型爲DifferentCar(或其中一個子類,如果實現選擇進行替換)。

什麼Xx在那裏?

在上述Xx呼叫確定物體到其上alloc消息將被髮送,並最終決定所創建的對象的類型的類型。請注意,由於您立即致電init,從呼叫返回的對象可能與發送到呼叫的對象不同。

+0

確定的答案。不過要清楚的是,'myCar'的類型是'Car *',而不是'Car'。 – Caleb 2015-02-10 18:08:39

+0

@Caleb好吧,由於星號更像是Objective-C的「語法必要性」(即語言無法通過變量引用變量而不用星號來引用對象),因此我不再描述變量的類型。 – dasblinkenlight 2015-02-10 18:19:40

+0

我通常不會這麼說 - 只要大家都知道你的意思,這是一個方便的速記。不過,初學者並不總是清楚對象和指針之間的區別,所以我認爲最好在這個例子中明確指出。我不是故意糾正你的,只是爲了澄清OP。 – Caleb 2015-02-10 18:24:36