- 下面代碼會(huì)輸出什么?
int a = 3;
void (^myblock)(void) = ^(){
NSLog(@"%d",a);
};
myblock();
a = 4;
myblock();
// 正確結(jié)果: 3 3
通過打印的地址得知, 在Block內(nèi)部和外部變量a的地址不一樣, Block內(nèi)部對變量a進(jìn)行了默認(rèn)copy操作, 外部變量a的值的改變不會(huì)影響到Block內(nèi)部. 并且copy后的值存放于堆區(qū)(尚待驗(yàn)證).
Tips:
1). Block內(nèi)部不能直接修改外部變量的值, 如果修改需要在外部變量定義前加上關(guān)鍵字 _ _block ;
2). Block內(nèi)部可以定義和Block外部相同名的變量, 此時(shí)內(nèi)部的變量會(huì)在Block作用域內(nèi)暫時(shí)屏蔽外部變量, 且內(nèi)部定義的變量也在棧區(qū).
- nil, Nil, NSNull, NULL分別用在什么場合?
iOS中的四大皆空:
標(biāo)志 | 值 | 含義 |
---|---|---|
NULL |
(void *) 0 | C指針的字面零值 |
nil |
(id) 0 | Object-C對象的字面零值 |
Nil |
(Class) 0 | Object-C類的字面零值 |
NSNull |
[NSNull null] | 用來表示零值的單獨(dú)的對象 |