推 Blueshiva:Protocal定義裡面可以指定一定要實作哪些method 02/14 16:28
→ Blueshiva:然後,Obj-C的精神是message傳遞,每個所謂的 method 呼 02/14 16:29
→ Blueshiva:叫,都是呼叫一個固定的function(底層的C實作),參數帶 02/14 16:30
→ Blueshiva:你要呼叫的"method特徵",所以只要被呼叫的object有對應 02/14 16:30
→ Blueshiva:的method特徵實作,就會被叫出來執行 02/14 16:31
→ Blueshiva:基本上,你要理解Obj-C的設計,你需要先知道,Obj-C設計 02/14 16:32
→ Blueshiva:的時候"沒有C++,沒有Java,它是純C去做出物件的行為" 02/14 16:32
你是說, Obj-C 在設計的時候, C++ 還沒發明出來是嗎?
因為這句也可以理解成 "沒有使用 C++"
但 C++ 可以用前置處理器做掉,然後 .cpp 就變 .c, 再交由標準 C compiler 去跑
所以如果不是 "C++ 還沒發明出來", 而是 "沒有使用 C++"
那我就無法理解了
→ Blueshiva:然後就比較能體會為什麼要這樣設計 02/14 16:33
如果是"當時還沒有 C++", 那我就懂為何它要自稱 Object 語言了 XD
因為 C++ 也是 Object 語言
就好像一家在濁水溪的米取名叫濁水溪米,但明明其他很多米也是濁水溪米
那我會覺得"你怎麼把大家的名字拿去註冊了啊,根本先講先贏嘛"
---
那有個效率上的問題,在 wiki 上我竟查到,它用訊息效率也不差.. 啊?怎麼做到的
C++ 的做法其實只是語法符號
基本上 class 可以用 struct 取代
function pointer 在 C 時代早就有了
只要在 strcut 內擺入 fp
struct 就可以運作得和 class 一樣
當然, private, public 等等權限檢查,那是沒有了
可以說 C++ compiler 帶來的'必要性差異',就在權限檢查
所以 C++ 置換成 C,是絕對可行;而且有一個很標準的模型
Obj-C 的 head file 可以分兩三處各別宣告 XDDD
所謂 category,老實說這是我從前的夢想
我一直想要臨時增加一些宣告,但不要給其他 .c/cpp 檔看到
繼承到不同的子類別再各別寫?
但所有功能在 class 內都要有 private 引用的能力
可以說全都該寫到 base class 內
然後再依不同狀況 public 出去
可是子類別都必需 include 父類別,而 .h 就會公開
雖然 obj 可以不公開,但也被看到很多了
category 似乎可以解決這個問題(我還沒很清楚)
其實以前看過 C# 簡介(但我沒學),好像就有這個能力
.h 可以拆開到幾個地方
用 message 是可以理解了,那當然做得到
但程式又怎麼快得起來 :P
messge 怎麼找得到 code 來執行
目前我的理解是像微軟的 DLL,
動態的東西就是要這樣,甚至函式都有保留完整 symbol
然後才可以去做字串比對,找出來執行
字串比對,就不快啦~
但如果它不想快,只想當高階語言 (反正電腦會愈來愈快)
那就很容易理解了
※ 編輯: HuangJC 來自: 60.251.197.63 (02/14 16:51)
→ yuanruo:class有一個method_list 會根據你傳入的SEL做比較 02/14 20:28
→ yuanruo:SEL就你的方法名 它是用一個優化過的hash table 的set 02/14 20:30
→ yuanruo:所以找到class的SEL後再根據你IMP的位置去找 02/14 20:31
→ yuanruo:我記得這個set有原本系統dyld給你創的cache set,讓你能 02/14 20:36
→ yuanruo:讓你優先查找系統你導入framework的method 和決定是否需要 02/14 20:37
→ yuanruo:括展你自己加入方法的method_list 02/14 20:38
推 Blueshiva:你去查一下程式語言的發展史,不就知道ObjC是"不用C++" 02/15 01:06
→ Blueshiva:(老實說我不是很確定這句話是啥意思)還是"沒得用C++"了? 02/15 01:06
> 貝爾實驗室的比雅尼·斯特勞斯特魯普博士在20世紀80年代發明並實現了C++
> 1980年代初,Stepstone 公司的 Brad Cox 與 Tom Love 發明了 Objective-C
from wiki
要更考古才知道答案,不然我以為 1980 就是80年代,差不多差不多
要是說"戰",那是了,兩派工程師不知會不會吵起來
其實我不是要選擇;吃人頭路我已經沒有選擇了(可以只憑 C++ 寫出來嗎?)
而是去搞懂它的差異,也比較能運用它
話說回來,我買了一本 Object C 的書,應該是專教語言才對
結果它還是一直提 Mac,好像除了它沒人在用似的
難道市場說明了.. 咳咳
※ 編輯: HuangJC 來自: 60.251.197.63 (02/15 01:28)