1.block是存儲在堆中還是棧中?
默認情況下block在棧中,但是如果對block進行了一個copy操作,block會轉移到堆中
如果block在棧中,block訪問了外界的對象,那么不會對對象進行retain操作
如果block在堆中,block訪問了外界的對象,那么會對對象進行一次retain操作
如果給外界的對象加上了__block,那么就算block在堆中,也不會對外界對象進行一次retain操作
2.為什么給外界變量加上__block就能修改外界變量的值?
因為__block進行的是地址傳遞,所以可以在block中修改外界變量的值,默認情況下block不能修改外界變量的值,因為他進行的是copy操作