block常見的幾個問題

2021-07-11 03:22:00 字數 882 閱讀 9163

block的理解

block是乙個指向結構體的指標,編譯器會將block的內部**生成對應的函式

一,block與變數

1)可以修改全部變數和靜態變數

2)不可以修改區域性變數,如果想要修改使用__block

注意:block之所以能夠修改全域性變數和區域性變數與使用__block修飾的區域性變數,是因為把指向變數的指標copy到block結構體內部.而布局變數是copy的變數值到block內部.

二,block與copy屬性

block的記憶體是放在棧中,不需要程式設計師去管理,什麼時候釋放記憶體也不是程式設計師可以決定的,當我們想要block時,就需要使用copy屬性,會把block copy到堆上.在arc中,對block**塊內部的物件強引用.在飛arc中對於引用物件進行一次retain操作.

三,block與迴圈引用

在block**塊內部如果使用了當前物件進行呼叫方法,或者他的的操作,就會對當前物件進行強引用一次.使得當前物件又引用了當前物件.而不能正常釋放.

使用__weak來修飾可以避免對控制器或者當前類的迴圈引用.

wtviewcontroller *__weak weakselef = self;

四,block與記憶體管理

1.block的記憶體預設是在棧中(開發人員不需要去管理block記憶體),在block內部引用的物件,如果做一次release操作就可以釋放,block不會對所引用物件進行任何操作

2.如果對block進行了copy操作(block的記憶體會搬到堆裡面),在block內部引用的物件引用計數加1 .它會對所引用的物件做一次retain操作.如果在非arc中block外部使用__block修飾所引用的物件,在arc中使用__unsafe_unretained(或者__weak)修飾引用的物件,就不會做retain操作

安裝nginx常見的幾個問題

tar zxvf nginx 0.8.33.tar.gz cd nginx 0.8.33 configure prefix usr local nginx make make install 說明一下nginx的configure引數 configure命令是用來檢測你的安裝平台的目標特徵的。它定義...

PaddleHub使用常見的幾個問題

c users administrator paddlehub modules如果需要離線安裝,只需要拷貝對應的modules即可 paddlehub有兩種模式,server和develop模式 使用前需要設定 使用dev模式 set flask env development 使用server模式...

幾個問題的

1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value 解 無符號整型為32位,所以利用迴圈32次,逐個判斷二進位制每一位是不是1 int count one bits unsig...