Re: [問題] 如何只執行一個Method一次?
解決了,用dispatch_once,我原本就有@synchronized過我的Object了
首先
static dispatch_once_t once_token = 0;
執行method時
dispatch_once(&once_token, ^{ // Execute method only once
[self appendList];
});
執行完appendList最後加上
once_token = 0; // Reset
因為
dispatch_once_t
typedef long dispatch_once_t;
Variables of this type must have global or static scope.
把它Reset成0之後,dispatch_once就可以再執行一次,
而且可以確保是在執行完appendList才執行!
※ 引述《atst2 (atst2)》之銘言:
: ※ 引述《kiii210 (Johnny.T)》之銘言:
: : 碰到了一個問題,目前做的功能是在tableView往下scroll到某個點的時候
: : 執行某個method,因為是要抓資料,我希望這個method只執行一次,
: : 但是scroll的時候很快,就會一直不斷重複執行該method...
: : 想要在到某個點執行method後,不再執行他,只能執行一次,等到我說可以再執行
: : 試過dispatch_once,不過不知道要怎麼讓它可以在我資料讀取完後 再回來執行?
: : 也嘗試過BOOL來判斷,但是scroll的速度實在太快了,還是有機會會跑到判斷式內...
: : 有人可以指點一下嗎?謝謝
: 可以試著 method 內加synchronized鎖定試試看
: - (void)myMethod
: {
: @synchronized(something) //something 必需是一個物件,scope則看你的需求
: {
: // write what you want to do
: }
: }
: 另外,你現在對BOOL的操定有鎖定嗎? 第一眼看到,直覺上是對BOOL的沒有鎖住造成的...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.13.16.179
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章