簡體   English   中英

為什么使用稱為“文字”的“文字語法”創建實例?

[英]Why are instances created using a 'literal syntax' known as 'literals'?

令我困擾的是為什么使用“文字”一詞​​來指代NSStringNSArray之類的類的實例。 我只看到過用於指代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.

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