關於一些變數的使用
如何要宣告一個可以被全域性訪問的的字串常量?
UIKIT_EXTERN NSString *const PYSearchPlaceholderText;
#define UIKIT_EXTERN extern __attribute__((visibility ("default")))
</br>
const 用法解釋
四種寫法:
1. static const NSString *HSCoder = @"漢斯哈哈哈"; // 指向的指標不能改變,static限制了不能被外部檔案訪問了
2. const NSString *HSCoder = @"漢斯哈哈哈"; // 指向的記憶體地址的內容不能改變,但是可以改變指向的指標
3. NSString const *HSCoder = @"漢斯哈哈哈"; // 指向的記憶體地址的內容不能改變,但是可以改變指向的指標
4. NSString * const HSCoder = @"漢斯哈哈哈"; // // 指向的記憶體地址的內容不能改變(NSString本身就不能改變),指向的指標也不能改變。
注意:
- 以上4種情況,在另外一個檔案中使用extern修飾變數,可以直接改變地址記憶體的內容。(不知道該怎麼解決....才能使得在另外的檔案中也不能修改)
- 區域性常量:用static修飾後,不能提供外界訪問
參考http://www.jianshu.com/p/f83335e036b5
</br>
static 用法解釋
</br>
extern 用法解釋
在原始檔A裡定義的變數,在其它原始檔裡是看不見的(即不能訪問)。為了在原始檔B裡能呼叫這個函式,應該在B的頭部加上一個外部宣告: extern 變數; 這樣,在原始檔B裡也可以呼叫那個變數了。
注意這裡的用詞區別:在A裡是定義,在B裡是宣告。一個函式只能(也必須)在一個原始檔裡被定義,但是可以在其它多個原始檔裡被宣告。定義引起儲存分配,是真正產生那個實體。而宣告並不引起儲存分配。
打一個粗俗的比方:在原始檔B裡宣告後,好比在B裡開了一扇窗,讓它可以看到A裡的那個變數。
attribute 用法解釋
attribute是GNU C的一種機制,用法為attribute_ ((attribute-list))。當專案需要作為一個庫被外包引用的時候通常在編譯時可以用引數-fvisibility指定所有符號的可見性。在編譯命令中加入 -fvisibility=hidden引數,會將所有預設的public的屬性變為hidden。此時,如果對函式設定attribute((visibility ("default")))引數,使特定的函式仍然按預設的public屬性處理,則-fvisibility=hidden引數不會對該函式起作用。所以,設定了-fvisibility=hidden引數之後,只有設定了attribute((visibility ("default")))的函式才是對外可見的。
</br>
總結:如果需要讓類或方法可以讓庫外被引用,就需要使用以上程式碼確保程式碼的可見性。
相關文章
- 關於js變數提升JS變數
- 關於JavaScript變數提升JavaScript變數
- 關於Mysql使用的一些總結MySql
- 關於dmserver使用的一些竅門Server
- 關於 變址影像(indexed image) 的一些總結Index
- Java 關於執行緒的一些使用Java執行緒
- mysql練習 —— 關於一些函式的使用MySql函式
- 關於javascript中變數及函式的提升JavaScript變數函式
- 記錄一個關於變數命名的事情變數
- 關於typedef在struct使用上的一些問題Struct
- 關於iframe中使用fixed定位的一些問題
- 關於 Angular 註解 @Injectable() 使用的一些誤區Angular
- 關於c#使用Npoi庫的一些隨筆C#
- 關於變數與‘=’賦值的情況出錯變數賦值
- 2.7.6.1 關於改變初始化引數的值
- 關於angularJS的一些用法AngularJS
- 關於table的一些操作
- 關於position的一些理解
- 關於CodeReview的一些思考View
- 關於Flutter空安全的一些使用經驗和理解Flutter
- Sqlserver 關於臨時表和表變數的總結SQLServer變數
- 關於ASM的一些理論ASM
- 關於 performSelector 的一些小探討performSelector
- 關於 Masonry 的一些思考(下)
- 《關於MySQL的一些騷操作》MySql
- 關於秋招的一些真相
- 關於一些奇葩的相容bug
- 關於Redis的一些小問題Redis
- 關於Canvas的一些經驗Canvas
- 關於position定位的一些理解
- 關於“運維”的一些思索運維
- 關於fsdb的一些記錄
- 關於c#的HttpUtility.UrlDecode/使用 Request.QueryString 接受引數時,跟編碼有關的一些問題C#HTTP
- 關於單例及靜態變數測試單例變數
- MySQL變數的使用MySql變數
- go 的變數使用Go變數
- 變數的基本使用變數
- 關於MySQL中的8個 character_set 變數說明MySql變數
- [譯] 關於 CSS 變數,你需要了解的一切CSS變數