簡體   English   中英

NSString 是什么類型,有多少字節?

[英]What type is NSString and how many bytes?

我是目標 c 的新手。 試圖找出 Objective C 中 NSString 的類型。我使用 C 中的 sizeof() 方法和使用 NSString 中的 UTF8 編碼的 lengthOfBytesUsingEncoding 方法。

NSString *test=@"a";

NSLog(@"LengthOfBytesUsingEncoding: %lu bytes", [test lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);

printf("NSString: %lu\n", sizeof(test));

這將在控制台中給我

LengthOfBytesUsingEncoding:1 字節NSString:8 字節

這兩個結果有什么區別? 為什么 LengthOfBytesUsingEncoding 返回 1 個字節而 sizeof 方法返回 8 個字節? NSString 的類型是什么? int、float、long、long double?

字節長度為您提供使用指定編碼的文本內容的長度。 在這種情況下,字符串包含單個字符,在 UTF8 中被編碼為 1 個字節。

sizeof為您提供變量類型的大小,在本例中是指向NSString的指針。 64 位體系結構上所有指針的大小為 8 字節。 它本質上是存儲NSString數據的內存地址的大小。 sizeof不是一個方法,它甚至不是一個函數。 是運營商。 結果在編譯時已知。

換句話說:

  1. 實際的字符串內容以不透明的格式存儲在內存中,您不應該感興趣。

  2. 在內存的另一個地方,有一個包含指向內容的指針的NSString數據結構。 您可以使用sizeof(NSString)獲取此結構的大小(實際上大小會因具體的NSString子類而異,例如NSMutableStringNSPlaceholderString等)。

  3. 您的變量包含一個指向NSString的指針,即其大小為sizeof(NSString*) ,始終為 8 個字節。

sizeof運算符不應該讓你對 Objective-C 感興趣,除非你正在處理指針算術,這應該是相當罕見的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM