2014-09-02 72 views
0

我很困惑。 NSData的sizeof.length之間的區別是什麼。長度是一個字符數?對?但這是否意味着sizeof?任何人都可以解釋我更準確地PLZNSData的sizeof和長度的區別

+2

事實上,如果您忘記了Google的話,您可能會感到非常困惑... – holex 2014-09-02 13:41:43

回答

3

sizeof()是一種語言的關鍵字,返回一個類型的存儲大小,並在編譯時進行評估。

例如:

NSData *obj = [NSData data]; 
NSLog(@"%lu", sizeof(obj)); 

將一個64位的平臺作爲obj在32位平臺或8上打印或者4是一個指針,這是一個指針多少空間需要在這些平臺上。

這是一樣的:根據不同的平臺

NSLog(@"%lu", 4); 

NSLog(@"%lu", 8); 

正在編制上。

但是NSData是一個存儲數據的對象,它提供了length方法,因此您可以詢問它當前存儲的數據量。它在運行時進行評估。

NSLog(@"%lu", obj.length); 

打印0因爲那個NSData對象是空的。

0

我不是在iOS的專家,但我試圖尋找了一下。看起來.Length是「接收器中包含的字節數」。而.sizeof代表「整個NSData結構在內存中佔用的實際字節數」。

在其他語言中也可能不同的表現 - 即C#的字符串:length將是20對20個字符,但在C#中使用Unicode - sizof()將返回40.然而,其他對象的行爲可能以完全不同的方式....

我認爲在你的榜樣sizeof()但是可能返回兩個可能的結果 - 通過NSData的內部結構(如指針(S)到真實的數據,計數器等),有或沒有包含數據的大小佔用的字節數。

我想最好的辦法是設法保存一些數據,並比較兩種方法:)的輸出,如果NSData的根本指針 - 的.sizeof結果將只是48 - 指針的大小:)