[問題] 為什麼NSMutableArray可有不同class物件

看板MacDev作者 (300道題..)時間10年前 (2015/01/05 15:28), 編輯推噓3(3025)
留言28則, 8人參與, 最新討論串1/1
感謝各位大大撥冗查看小弟的笨問題 小弟那天面試一間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

01/05 15:34, , 1F
ObjC所有的物件都是繼承自NSObject,所以NSArray只要檢
01/05 15:34, 1F

01/05 15:35, , 2F
查丟進來的東西是NSObject就可以存了。C要這樣搞也是可
01/05 15:35, 2F

01/05 15:36, , 3F
已,就是宣告一個type都是void的array就可以了
01/05 15:36, 3F

01/05 15:39, , 4F
所以就是因為所有物件都繼承於NSObject...?
01/05 15:39, 4F

01/05 15:39, , 5F
XDDD原來這麼簡單,我好笨喔,謝謝
01/05 15:39, 5F

01/05 15:40, , 6F
難怪沒人問!
01/05 15:40, 6F

01/05 16:14, , 7F
說NSObject的物件或是id物件都可以,id物件是抽象的物件
01/05 16:14, 7F

01/05 16:30, , 8F
感謝各位大大的解說><
01/05 16:30, 8F

01/05 17:52, , 9F
@darktt 其實不一樣, id 不見得繼承自 NSObject
01/05 17:52, 9F

01/05 17:52, , 10F
並沒有規定 Objective-C class 一定要繼承 NSObject (只
01/05 17:52, 10F

01/05 17:53, , 11F
是慣例), 這點和 Java 不一樣
01/05 17:53, 11F

01/05 22:13, , 12F
我是有試過Root class,不過init的過程要自己完成就作罷
01/05 22:13, 12F

01/05 22:14, , 13F
所以一直無法驗證Root Class是否可以使用id做替代
01/05 22:14, 13F

01/06 00:35, , 14F
id 是 typedef struct objc_object *id;
01/06 00:35, 14F

01/06 00:36, , 15F
我試過了, 只要有實作 retain 就可以被加入
01/06 00:36, 15F

01/06 00:36, , 16F
例如NSProxy 跟block 就不是繼承NSObject,
01/06 00:36, 16F

01/06 00:37, , 17F
被移出需要實作 release, 其他一些功能需要其他 methods
01/06 00:37, 17F

01/06 00:37, , 18F
不過 他們都是Objective C object
01/06 00:37, 18F

01/06 00:37, , 19F
有空再另寫文章討論
01/06 00:37, 19F

01/06 09:16, , 20F
都可以吧
01/06 09:16, 20F

01/06 09:34, , 21F
Java為什麼不行? 不就Object[] ?
01/06 09:34, 21F

01/06 10:50, , 22F
@ssccg 你在 Object[] 裡放 int 給我看
01/06 10:50, 22F

01/06 10:51, , 23F
(啊我發現這例子不好, NSArray 也不行 XD 算了)
01/06 10:51, 23F

01/06 11:41, , 24F
int是C type所以不行,不過在swift下就沒這個限制了
01/06 11:41, 24F

01/06 11:58, , 25F
int又不是物件, Java可以放Integer, Obj-C可以用NSNumber
01/06 11:58, 25F

01/06 12:25, , 26F
uranusjr馬上就發現啦,一直追這點幹嘛 XDD
01/06 12:25, 26F

01/06 16:11, , 27F
但我覺得 int 不是物件根本很腦殘, Objective-C 本來就
01/06 16:11, 27F

01/06 16:12, , 28F
疊床架屋就算了, Java 硬模仿 C++ 又學不像就很智障
01/06 16:12, 28F
文章代碼(AID): #1KgZqH7Y (MacDev)
文章代碼(AID): #1KgZqH7Y (MacDev)