block快的存儲位置(block入口的地址)可能存放在3個地方:代碼區(qū)(全局區(qū))、堆區(qū)、棧區(qū)(ARC情況下回自動拷貝到堆區(qū)、因此ARC下只有兩個地方:代碼區(qū)和堆區(qū))。
我們將block聲明為copy的原因是在代碼塊里面我可能會使用一些本地變量。而block一開始是放在棧上的,只有copy后才會放到堆上。如果不加copy屬性,當(dāng)其所在棧被釋放的時候,這些本地變量將變得不可訪問。一旦代碼執(zhí)行到block這段就會導(dǎo)致bad access。
???Block如果沒有引用外部變量
保存在全局區(qū)(MRC/ARC一樣)
???Block如果引用外部變量
ARC保存在 堆區(qū)(默認(rèn)進(jìn)行copy); MRC保存在 棧區(qū)必須用copy修飾block;