返回nil
這裏是一個錯誤,因爲你返回的是一個整數原語而不是對象。 (因爲nil
實際上是#define
,它的計算結果爲((void *)0)
,它是一個空指針,而不是整數零),因此與Cocoa交互的Objective-C代碼的最佳選擇可能是使用NSNotFound
,一個#define
代表NSIntegerMax
,它在整個Cocoa中用來表示給定的值在接收器中不存在等。(另一個選擇是使用-1
,這在C代碼中更常見。什麼效果最好取決於調用代碼期望並且能夠處理)。
儘管NSNotFound
是一個有符號的值,但它足夠大以至於不太可能遇到範圍問題。 (NSIntegerMax
大約是NSUIntegerMax
的一半,很少有人在32位的土地上遠程接近2,147,483,647個對象 - 更不用說是兩倍多了 - 更不用說是那麼多了 - 在64位中,忘記它了;你的物理內存不足機器很久沒有用完索引整數。)
說到這一點,可可慣例是使用NSUInteger
(而不是NSInteger
)作爲索引。無符號整數不能爲負數,它提供了對索引值的一些健康保護;除此之外,整理意外的整數溢出/下溢變得更容易。如果這是一個自定義數據源方法(好像是),我強烈建議切換到使用無符號整數。 (這可能有助於記住/認識到NSInteger
和NSUInteger
佔用相同的字節數,它們只是以不同的方式解釋這些位,所以你不會通過切換類型來「浪費」任何空間。)
感謝奎因,在我的情況下這兩個值似乎工作得很好。 – ff10 2010-01-07 22:08:05
關於'NSNotFound'的大提示,謝謝! – Prairiedogg 2010-03-02 06:22:53
這是幾年前的應用程序,我不得不開始維護。在維護代碼的同時,我在XCode中看到了170多個警告。很少有這種錯誤造成的! :-) 謝謝! (Y) – 2015-11-19 10:54:45