對block的理解:
block宣告的寫法:
@property (strong, nonatomic) void (^block) (void);
@property (copy, nonatomic) void (^block)(void);
block的本質:就是oc的物件,內部也有isa指標,block是封裝了函式呼叫以及函式呼叫環境oc物件;
- (void)testblock
void(^block) (int a, int b) = ^{
nslog(@「a=%@,b=%b」,a,b);
block(30, 50);
可以通過編譯成c++ 對比出來分析
block的本質確實是_main_block_impl_0結構體型別;
1)——block_impl結構體中isa指標儲存著& _nsconcretestackblock位址,理解為類物件位址,block就是_nsconcretestackblock型別的;
2) block**塊中的**被封裝成__main_block_func_0函式,funptr即儲存著—__main_block_fun_0函式的位址;
3)desc指向__main_block_desc_0結構體,其中儲存_main_block_impl_0結構體所占用的記憶體;
1 變數的捕獲變數
a ) 區域性變數
b) 全域性變數
區域性變數: 可以—捕獲block內部變數-訪問方式通過:auto-通過值傳遞,而static-指標訪問
全域性變數:不能—捕獲block內部變數,直接可以訪問;
區域性變數都會被block捕獲,自動變數是值捕獲,靜態變數為位址捕獲。全域性變數則不會被block捕獲
2 block的型別
block的三種型別
__nsgloballock__ 資料斷(記憶體區域)
__nsstackblock__ 棧上 (記憶體區域)
__nsmallocblock__ 堆上 (記憶體區域)
對iOS中block的一點領悟
看之前可以先做一下這個測試題目 如果都不能難倒你,那麼下面的你也不用看了。在objective c語言中,一共有3種型別的block nsconcreteglobalblock 全域性的靜態block,不會訪問任何外部變數。nsconcretestackblock 儲存在棧中的block,當函式返回...
對 threadfence的一點理解
一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...
對GBDT的一點理解
gbdt由一系列的回歸樹組成,如下圖所示 樹的深度未必都要一樣,下圖僅為示意圖 gbdt原理 針對每乙個類別訓練一系列的回歸樹,再累加每個類別回歸樹的 值得到針對每個類別的最終的 值。單獨拿乙個類別來說,訓練的過程中假設需要 的值為f xi 實際的值為yi 有loss function l yi,f...