程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 關於block訪問外部變量的一些小注意點

關於block訪問外部變量的一些小注意點

編輯:關於C

Block類型是一個C級別的語法和運行機制。它與標准的C函數類似,不同之處在於,它除了有可執行代碼以外,它還包含了與堆、棧內存綁定的變量。因此,Block對象包含著一組狀態數據,這些數據在程序執行時用於對行為產生影響。

  你可以用Block來寫一些可以傳到API中的函數語句,可選擇性地存儲,並可以使用多線程。作為一個回調,Block特別的有用,因為block既包含了回調期間的代碼,又包含了執行期間需要的數據。

  由於Objective-C 和 C++ 都是衍生自C,block被設計為可同時兼容這三種語言。

今天主要來說說block訪問外部變量的一些東西!

1)在block內部可以訪問block外部的變量

在block內部可以使用外部變量

\
但是要注意,這是一個新的內存空間變量\

\
\
block內部也可以定義和block外部的同名的變量(局部變量),此時局部變量會暫時屏蔽外部變量的作用域

\
\

2)在block內部不可以修改block "外部的變量"

  非局部變量會以const變量被拷貝並存儲到block中,也就是說在block中是只讀的。如果嘗試在block內部給m變量賦值,會拋出編譯器錯誤。

\
\
\
  凍結中的非局部變量是一個常量值,這也是一種默認的安全行為——因為這可以防止在block中的代碼對非局部變量做了意外的修改。

\
\
給局部變量加上__block關鍵字,則這個局部變量可以在block內部進行修改。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20160408/20160408091645204.png" alt="\">\

注意:

1、靜態變量和全局變量在加和不加__block都會直接引用變量地址。也就意味著可以修改變量的值。在沒有加__block關鍵字的情況下。

2、常量變量(NSString *a=@"hello";a為變量,@“hello”為常量。)
  不加__block類型,block會直接取常量值(淺拷貝)。
  加__block類型,block會去引用變量的地址。(如:a變量,a = @"abc".可以任意修改a 指向的內容。)

如果不加__block直接在block內部修改變量 ,會編譯報錯。block內部改變量是只讀的。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved