我是目標 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?
uj5u.com熱心網友回復:
位元組長度為您提供使用指定編碼的文本內容的長度。在這種情況下,字串包含單個字符,在 UTF8 中被編碼為 1 個位元組。
在sizeof為您提供了變數的型別,其中,在這種情況下是一個指標的大小NSString。64 位體系結構上所有指標的大小為 8 位元組。它本質上NSString是存盤資料的記憶體地址的大小。sizeof不是一個方法,它甚至不是一個函式。是運營商。結果在編譯時已知。
換句話說:
實際的字串內容以不透明的格式存盤在記憶體中,您不應該感興趣。
在記憶體的另一個地方,有
NSString一個包含指向內容的指標的資料結構。你可以采用這種結構的尺寸sizeof(NSString)(實際尺寸將根據具體不同NSString的子類,如NSMutableString,NSPlaceholderString等)。您的變數包含一個指向 的指標
NSString,即其大小為sizeof(NSString*),始終為 8 個位元組。
sizeof 運算子不應該讓你對 Objective-C 感興趣,除非你正在處理指標算術,這應該是相當罕見的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334831.html
上一篇:獲取陣列元素并洗掉
