0

这就是我实现我的方式。Sometihng 只是不正确

-(void)setCurrentAnchor:(CLLocation *)currentAnchor 
{
    //CM(@"set current anchor");
    /*@synchronized (self)
     {

     }*/

    if (_currentAnchor==currentAnchor)
    {
        return;
    }
    //[Tools DoSomethingWithSynchronize:^{
    @synchronized(self){
        _currentAnchor=currentAnchor;
        [Timer searchCriteriaChanged];
        [cachedProperties setDistanceForAllBiz];
    }

    //}];

}

-(CLLocation *)currentAnchor
{
    //[Tools DoSomethingWithSynchronize:^{
    //}];
    @synchronized(self){

    } //Empty @synchronized section just to block every other thread
    [self setCurrentLocationasAnchorifNil];
    return _currentAnchor;
}

目标当然是确保 currentAnchor 在更改时永远不会被访问。我这样做对吗?

4

1 回答 1

0

最好使用简单的 getter/setter 实现——@synthesize理想情况下——并将所有更改响应逻辑移到 getter/setter 之外。如果您需要单个 getter/setter 响应逻辑,KVO 可以正常工作。如果您想批量响应多个属性更改,则必须有一个外部事务机制。

于 2012-05-22T16:58:09.477 回答