看板 MacDev 關於我們 聯絡資訊
感謝各位大大撥冗查看小弟的笨問題 小弟那天面試一間iOS開發者,之前就有聽說老闆本身寫iOS神強 後來老闆進來聊一聊以後,的確問了一些技術問題 大部份都能說個輪廓出來,就是有一題我直接說我不知道。。。 連想都沒想過 就是如題『為什麼Obj-C的Array可以同時contain多個型態的物件?』 回家google半天,大部份的說明也都是說可以有不同class物件在裡面 但是沒有人說過原理,為什麼C不行,Java不行 偏偏就是Obj-C可以咧。。。? 感謝各位大大的解答...^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.38.1 ※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1420442897.A.1E2.html
Blueshiva: ObjC所有的物件都是繼承自NSObject,所以NSArray只要檢 01/05 15:34
Blueshiva: 查丟進來的東西是NSObject就可以存了。C要這樣搞也是可 01/05 15:35
Blueshiva: 已,就是宣告一個type都是void的array就可以了 01/05 15:36
bbbbbird: 所以就是因為所有物件都繼承於NSObject...? 01/05 15:39
bbbbbird: XDDD原來這麼簡單,我好笨喔,謝謝 01/05 15:39
bbbbbird: 難怪沒人問! 01/05 15:40
darktt: 說NSObject的物件或是id物件都可以,id物件是抽象的物件 01/05 16:14
bbbbbird: 感謝各位大大的解說>< 01/05 16:30
uranusjr: @darktt 其實不一樣, id 不見得繼承自 NSObject 01/05 17:52
uranusjr: 並沒有規定 Objective-C class 一定要繼承 NSObject (只 01/05 17:52
uranusjr: 是慣例), 這點和 Java 不一樣 01/05 17:53
darktt: 我是有試過Root class,不過init的過程要自己完成就作罷 01/05 22:13
darktt: 所以一直無法驗證Root Class是否可以使用id做替代 01/05 22:14
appleway: id 是 typedef struct objc_object *id; 01/06 00:35
uranusjr: 我試過了, 只要有實作 retain 就可以被加入 01/06 00:36
appleway: 例如NSProxy 跟block 就不是繼承NSObject, 01/06 00:36
uranusjr: 被移出需要實作 release, 其他一些功能需要其他 methods 01/06 00:37
appleway: 不過 他們都是Objective C object 01/06 00:37
uranusjr: 有空再另寫文章討論 01/06 00:37
howdiun: 都可以吧 01/06 09:16
ssccg: Java為什麼不行? 不就Object[] ? 01/06 09:34
uranusjr: @ssccg 你在 Object[] 裡放 int 給我看 01/06 10:50
uranusjr: (啊我發現這例子不好, NSArray 也不行 XD 算了) 01/06 10:51
darktt: int是C type所以不行,不過在swift下就沒這個限制了 01/06 11:41
manlike: int又不是物件, Java可以放Integer, Obj-C可以用NSNumber 01/06 11:58
Blueshiva: uranusjr馬上就發現啦,一直追這點幹嘛 XDD 01/06 12:25
uranusjr: 但我覺得 int 不是物件根本很腦殘, Objective-C 本來就 01/06 16:11
uranusjr: 疊床架屋就算了, Java 硬模仿 C++ 又學不像就很智障 01/06 16:12