Re: [心得] 探討Objective-C Block (part 2)
: 推 aecho:請問一下,block variable哪個時候會被釋放掉? 08/31 19:38
: → aecho:countdown()裡面是共用了同一份資料吧? 08/31 19:39
: → aecho:那這塊記憶體是在stack還是heap呢? 08/31 19:39
: → aecho:每個變數都會有life scope,那block var的life scope是? 08/31 19:40
我沒有找到明確的資料
不過block variable以他的特性不太可能放在stack..
因為他不會因為function return而就不能使用
所以應該只能放在heap
而至於他的生命週期
我覺得block variable的生命週期應該是跟著closure. 而不是block
因為多個block可能reference到同一個closure
例如
- (void)createCountdown:(int)initValue{
__block int counter = intValue;
self.countdown1 = [[^int{
return counter--;
} copy] autorelease];
self.countdown2 = [[^int{
int temp = counter;
count -= 2;
return temp;
} copy] autorelease];
}
上面的例子兩個block都用到counter這個block varialbe
而這兩個block都會在被產生的時候reference到上面createCountdown這邊的closure
所以要等到countdown1跟countdown2這兩個block都release時
closure才會release
而這個block variable才會結束生命週期..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.239.119
推
09/01 23:50, , 1F
09/01 23:50, 1F
→
09/01 23:50, , 2F
09/01 23:50, 2F
→
09/01 23:51, , 3F
09/01 23:51, 3F
→
09/01 23:52, , 4F
09/01 23:52, 4F
→
09/01 23:53, , 5F
09/01 23:53, 5F
→
09/01 23:54, , 6F
09/01 23:54, 6F
→
09/01 23:55, , 7F
09/01 23:55, 7F
→
09/01 23:55, , 8F
09/01 23:55, 8F
→
09/02 08:27, , 9F
09/02 08:27, 9F
→
09/02 08:29, , 10F
09/02 08:29, 10F
→
09/02 08:30, , 11F
09/02 08:30, 11F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章