有關 Objective C 中乙個資料結構的問題,為什麼 NSArray 和 NSDictionary 都被設計成只能存放物件(不能存放基本型別,如 int)?

時間 2021-06-01 17:21:31

1樓:

因為NSArray中儲存的是指標,並且通過在加入到容器中的時候retain來保證指標的有效性。

OC的堆上儲存是基於引用計數的,而原始資料型別的操作方式和OC型別是不同的(不需要retain)。

個人認為cocoa設計時為了效率(不需要判斷加入容器中的元素的型別),也為了抽象的一致性(即引用計數操作),而沒有允許NSArray中儲存指標意外原始資料型別。

如果你需要使用NSArray儲存原始資料型別,只需用NSNumber來進行包裝就行了。

至於你說的用那個資料結構用於查詢的問題,一種方法是你可以把它用OC的類包裝,然後使用NSPredicate和[NSArray filteredArrayUsingPredicate:]方法來進行查詢.

2樓:馮東

因為 Cocoa 的 container 並不能了解其 item 的內部結構。它只能了解指標。即使只用來儲存簡單型別,也要了解資料的 size(如果考慮效率還要了解對齊)。

這是只有臃腫的 template 才會涉及的雷區。

BTW:還有 C++ 的 stack variable,也是強制 caller 必須了解物件內部結構的雷區。

3樓:李樂佳

這些資料都是按照指標來訪問的,但是基本型別一般不用指標訪問吧。

竊以為,既然是OO,那一切都是object,這些基本型別對應都有NSNumber NSString更強大封裝,可以用這些。而基本資料型別還是與鍊錶之類的基本封裝比較對應吧。

乙個有關地鐵的問題?

李耿飛 因為這樣可以讓更多的人上車,從而減少站台候車人員。讓沒擠上車的人有那麼幾分鐘覺得個人空間挺大的,心情不會那麼煩躁。畢竟上班沒打卡前的最後一張卡心情是很暴躁的。其次,每次列車出站你也會聽到 本次列車終點站xx站,下一站xx站 請需要的下車的乘客提前做好下車準備 等等的話 琉禾 回答一下這個問題...

乙個有關親戚的問題?

筱蘼 曾經看過乙個問題。如果你身邊很親近的人公升官了,你會怎麼辦?乙個人回答,我還是該怎麼辦怎麼辦,依舊嘻嘻哈哈啊,他個鱉孫能把我怎麼著啊。錯了,公升職加薪走上人生巔峰,就是為了給你們這些熟人看的。要不怎麼有榮歸故里這種說法。自己偷偷的花錢就好了啊。你這裡也是一樣。他小有成就就是為了讓你們這些親近的...

乙個慣性係以光速離開另乙個慣性系,其中乙個慣性系中有乙個相對靜止的光源發出光線,另乙個慣性系裡的相對靜止的一點上站著的乙個人能否看到這束光線?

飛劍 按照相對論,靠自己運動是不可能到達光速的,但宇宙的膨脹可以超光速。離我們越遠的天體遠離我們的速度越快,超光速遠離我們的那些天體就再也看不到了,如果剛好等於光速,應該也是看不到。 馬小馬seen 首先 根據狹相,相對於任意慣性系,可以達到光速的物質只有光。而光並沒有資格當做參考係中滴參照物。所以...