第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

字符串常量和字符串文字之間有什么區(qū)別?

字符串常量和字符串文字之間有什么區(qū)別?

jeck貓 2019-10-26 12:31:20
我正在學習Objective-C和Cocoa,并且遇到了以下說法:Cocoa框架期望將全局字符串常量而不是字符串文字用于字典鍵,通知和異常名稱以及一些采用字符串的方法參數(shù)。我只使用高級語言工作,因此不必過多考慮字符串的細節(jié)。字符串常量和字符串文字有什么區(qū)別?
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊


在Objective-C,語法@"foo"是不可變的,文字的實例NSString。它不會像Mike假設(shè)的那樣從字符串文字中生成常量字符串。


Objective-C編譯器通常在編譯單元中執(zhí)行內(nèi)部文字字符串,也就是說,它們合并了同一文字字符串的多種用法,而且鏈接程序有可能在直接鏈接到單個二進制文件的編譯單元中進行其他實習。(由于Cocoa區(qū)分可變字符串和不可變字符串,并且文字字符串也始終是不可變的,所以這可以簡單明了且安全。)


另一方面,常量字符串通常使用如下語法聲明和定義:


// MyExample.h - declaration, other code references this

extern NSString * const MyExampleNotification;


// MyExample.m - definition, compiled for other code to reference

NSString * const MyExampleNotification = @"MyExampleNotification";

此處的語法練習的重點是,通過確保即使在同一地址空間中的多個框架(共享庫)中也僅使用該字符串的一個實例,可以有效地使用該字符串。(關(guān)鍵字的位置很重要;它保證了指針本身是恒定的。)const


盡管在25MHz 68030工作站和8MB RAM的情況下燃燒內(nèi)存并不像以前那么大,但是比較字符串是否相等可能需要一些時間。確保大多數(shù)時間上相等的字符串也將成為指針相等的幫助。


舉例來說,您要按名稱訂閱對象的通知。如果您使用非恒定字符串作為名稱,則NSNotificationCenter在確定誰對該字符串感興趣時,發(fā)布通知可能會進行大量的逐字節(jié)字符串比較。如果大多數(shù)比較由于所比較的字符串具有相同的指針而短路,那么這將是一個巨大的勝利。


查看完整回答
反對 回復 2019-10-26
  • 3 回答
  • 0 關(guān)注
  • 748 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號