[英]Why are instances created using a 'literal syntax' known as 'literals'?
令我困擾的是為什么使用“文字”一詞來指代NSString
和NSArray
之類的類的實例。 我只看到過用於指代NSString
的術語,但天真的我認為它與“字面意義上的”字符串有關,即在引號之間。 抱歉,這聽起來很可悲,但這就是我一直在思考的方式。
然后,今天我了解到NSArray
某些實例也可以稱為文字實例,即使用“文字語法”創建的類的實例。
文字語法或文字只是使用語言中內置的專用語法創建的對象,而不是使用普通語法創建對象(無論如何)。
在這里,我創建一個文字數組:
NSArray* a = @[@"Hello", @"World"];
就所有意圖和目的而言,這是等效的:
NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil];
第一個被稱為文字,因為@[]
語法內置於創建數組的語言中,就像@"..."
語法內置於創建NSString
的方法一樣。
正如@Linuxios所指出的,該語言內置了文字語法。 但是,它們比您想象的要廣泛。 文字僅表示實際值已在源中編碼。 因此,ObjC中有很多文字語法。 例如:
1
整數 1.0
雙 1.0f
浮動 "a"
-C弦 @"a"
-NSString @[]
-NSArray ^{}
-功能 是的,塊只是函數文字。 它們是可分配給符號名稱(例如變量或常量)的匿名值。
一般來說,文字可以存儲在文本段中,並且可以在編譯時(而不是在運行時)進行計算。 如果我沒記錯的話,當前將數組文字擴展為等效代碼並在運行時進行評估,但是@"..."
字符串文字被作為靜態數據編碼到二進制文件中(至少現在是;使用的非Apple版本的gcc編碼一個實際的函數調用以構造靜態字符串(如我所記得)。
“文字”一詞用於指代類的實例
它並不是真正在指代實例; 創建對象后,創建對象的方式無關緊要:
NSArray * thisWasCreatedWithALiteral = @[@1, @2];
NSArray * butWhoCares = thisWasCreatedWithALiteral;
“文字”部分只是特殊語法@[@1, @2]
和
它與“字面上”是一個字符串有關,即在引號之間。
完全正確:這是數組的寫出表示形式,與使用諸如arrayWithObjects:
類的構造方法創建的表示形式相反arrayWithObjects:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.