0

これが私の実装方法です。何かが正しく満たされていない

-(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

完全に単純なゲッター/セッターの実装を使用する方がはるかに優れています(@synthesize理想的には)。すべての変更応答ロジックをゲッター/セッターの外に移動します。単一のゲッター/セッター応答ロジックが必要な場合、KVOは正常に機能します。複数のプロパティ変更への応答をバッチ処理する場合は、外部トランザクションメカニズムが必要になります。

于 2012-05-22T16:58:09.477 に答える