Re: [問題] 如何只執行一個Method一次?

看板MacDev作者 (Johnny.T)時間11年前 (2013/12/19 19:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
解決了,用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
文章代碼(AID): #1IijX88t (MacDev)
文章代碼(AID): #1IijX88t (MacDev)