OC 中 Block 中的 copy 是深拷貝還是淺拷貝

史上最強面試題:

block 中的 copy 是深拷貝還是淺拷貝?

(或者說 談?wù)?block 中的 copy 操作)

最強答案:

1、NSGlobalBlock 沒有 copy 行為,copy 后無任何變化。
2、從 NSStackBlockNSMallocBlock , copy 后 內(nèi)存是新地址,類似 深拷貝。
3、從 NSMallocBlockNSMallocBlock ,copy 后內(nèi)存不變,類似 淺拷貝。

可以通過以下代碼進(jìn)行測試以上結(jié)論:

int var = 99;

void (^block)(void) = ^{
    // 打開/關(guān)閉這句代碼, 可以做到將 block 做 Stack 與 Global 之間的轉(zhuǎn)換
    // NSLog(@"%zd", var);
};

NSLog(@"111111 ---> %@", block);
NSLog(@"111111 ---> %p", block);

NSLog(@"222222 -----> %@", [block copy]);
NSLog(@"222222 -----> %p", [block copy]);

// 添加這一句之后 后面的地址都一樣了.
block = [block copy];

NSLog(@"333333 ----> %@", [block copy]);
NSLog(@"333333 ----> %p", [block copy]);

NSLog(@"444444 ----> %@", [[block copy] copy]);
NSLog(@"444444 ----> %p", [[block copy] copy]);

測試流程:

  • 1、MRC 與 ARM 之間切換
  • 2、// 打開/關(guān)閉這句代碼, 可以做到將 block 做 Stack 與 Global 之間的轉(zhuǎn)換 進(jìn)行切換。

其實也不是最強,僅僅是 之一 而已。

謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容