作者kiii210 (Johnny.T)
看板MacDev
标题Re: [问题] 如何只执行一个Method一次?
时间Thu Dec 19 19:28:05 2013
解决了,用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