2013-10-20 46 views
0

我目前正在學習Objective C,並且遇到了C結構的使用。但是,我一直想知道以下問題的答案:在Objective C中使用C結構的優點是什麼?

如果我們可以創建Objective C類,那麼使用C結構的優點或要點是什麼?

例如,以下C結構:

struct date { 
    int day; 
    int month; 
    int year; 
}; 

這位一個NSDate類。那麼上面那個C結構有什麼意義呢?

回答

2

您可以將C結構傳遞給您直接鏈接到程序中的C或C++庫,例如Unix系統調用。

UIKit和Foundation使用許多C結構,如CGRect和NSRange。

NSNumbers的NSArray比簡單的C數組要昂貴得多。您不希望將繪圖上下文表示爲表示像素的NSNumber行的NSArrays的NSArray。你想要一個簡單的原始位描述。

+0

「NSNumbers的NSArray比簡單的C數組要昂貴得多。」 - 它*可能會更貴。這很大程度上取決於你想要做什麼。 http://stackoverflow.com/a/6268062/97337但是,對於一些常見的使用情況,您是正確的,C數據類型的開銷較少,因此對於某些性能關鍵型工作更受歡迎。 –

+1

@RobNapier如果你在任何64位平臺上,這些NSNumbers根本不需要分配,因此,NSNumbers將比分配和存儲一個結構更快! – bbum

0

用C結構的目標C項目的原因是:

  1. 與另一語言的交互,例如在使用C,C++一個遊戲項目等

  2. 要與之通信的一些Apple框架:石英核心等

...

0

問問自己使用什麼,比如說double? A double是一種抽象數據類型(它有多個內部存儲在一個你不需要知道的格式)並且是按值傳遞的。你可以使用基於對象的浮點數(例如NSNumber),但對於標準數學,你爲什麼要這樣做?

小數或複數如何?這可能是由兩個浮點數表示的。它應該像double - 堆棧分配一樣,按值傳遞 - 或像對象 - 堆分配,按引用傳遞?會像double那樣表現得最有意義,它們畢竟只是數字......

現在考慮一個點,也可能是由兩個浮點數 - 值類型或對象類型行爲表示的?蘋果去價值型爲NSPoint,看看它的定義,你會看到它的struct。你認爲這是否正確?

如果NSDate剛剛存儲一年/月/日,那麼蘋果可能會選擇一個struct,但其日曆和時區支持比它多一點。但NSTimeInterval是一個值類型(甚至不是struct,只是double的別名)。

你在哪裏繪製應該是一個值類型和應該是一個對象類型之間的邊界有些主觀。但是一般來說,如果類型是「數字類型」,那麼使用值類型可能是一個好的或者更好的選擇。

相關問題