Re: alloc和init 的指令
※ 引述《uranusjr (←這人是超級笨蛋)》之銘言:
推
07/14 20:40,
07/14 20:40
推
07/14 23:03,
07/14 23:03
→
07/14 23:04,
07/14 23:04
說這是 Objective-C 特殊的規則其實不太對
因為這是物件導向語言共通的規則, 只是 Objective-C 的表現比較 explicit
絕大多數的類似語言都有同樣的做法
例如 Python 的物件建立其實也有 __new__ 和 __init__ 兩個步驟
只是一般會用特殊語法 instance = Class() 一次做掉
但事實上它背後仍然是呼叫 allocator + inistializer 的形式
其實這就和 NSObject 的 +new method 差不多 (不知道有多少人知道這個 method)
只是 Python 允許你換掉 method 參數
所以可以用一個語法自動做完, 不需要像 Objective-C 分兩次
即使是 C++, 其實狀況還是一樣
雖然一般的做法都是把 allocation 和 initialization 一起放在 contructor
但是在有繼承的狀況下, constructor 其實沒辦法取代 initializer
例如 C++ 不能在 constructor 呼叫 virtual functions
因為在子類別的 allocation 完成之前無法使用 vtable
其他語言也會有各自的 quirks 讓它們需要把 initializer 獨立出來
相對地, Objective-C 因為分兩個步驟, 就不會有這個問題
因為在 initializer 執行時已經保證 allocation 完成
所以可以安全使用任何子類別的複寫
總之 allocator 與 initializer 分開不是 Objective-C 的專利
而是物件導向語言在底層實作必要的設計
只是不是每個語言都像 Objective-C 那麼赤裸裸把它秀給你看而已
--
Les grandes et les meilleurs tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.94.175
※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1405352995.A.DD3.html
※ 編輯: uranusjr (218.161.94.175), 07/14/2014 23:57:42
→
07/15 11:02, , 1F
07/15 11:02, 1F
推
07/15 11:08, , 2F
07/15 11:08, 2F
→
07/15 11:10, , 3F
07/15 11:10, 3F
→
07/15 11:11, , 4F
07/15 11:11, 4F
→
07/15 11:13, , 5F
07/15 11:13, 5F
推
07/15 23:07, , 6F
07/15 23:07, 6F
推
07/16 03:15, , 7F
07/16 03:15, 7F
→
07/16 03:15, , 8F
07/16 03:15, 8F
→
07/16 03:16, , 9F
07/16 03:16, 9F
推
07/16 14:25, , 10F
07/16 14:25, 10F
→
07/16 14:25, , 11F
07/16 14:25, 11F
→
07/16 16:55, , 12F
07/16 16:55, 12F
→
07/16 16:56, , 13F
07/16 16:56, 13F
→
07/16 16:56, , 14F
07/16 16:56, 14F
→
07/16 16:57, , 15F
07/16 16:57, 15F
→
07/16 16:57, , 16F
07/16 16:57, 16F
→
07/16 16:57, , 17F
07/16 16:57, 17F
→
07/16 16:58, , 18F
07/16 16:58, 18F
→
07/16 17:49, , 19F
07/16 17:49, 19F
→
07/16 17:49, , 20F
07/16 17:49, 20F
→
07/16 17:50, , 21F
07/16 17:50, 21F
→
07/16 18:19, , 22F
07/16 18:19, 22F
→
07/16 18:19, , 23F
07/16 18:19, 23F
推
07/16 23:49, , 24F
07/16 23:49, 24F
→
07/16 23:49, , 25F
07/16 23:49, 25F
→
07/16 23:51, , 26F
07/16 23:51, 26F
→
07/16 23:52, , 27F
07/16 23:52, 27F
→
07/16 23:52, , 28F
07/16 23:52, 28F
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章