Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';这是在不同线程中使用单例的最佳方法_Ios_Ios4 - Fatal编程技术网

Ios 什么';这是在不同线程中使用单例的最佳方法

Ios 什么';这是在不同线程中使用单例的最佳方法,ios,ios4,Ios,Ios4,我正在尝试构建一个单例缓存类。现在我遇到了一个问题,当两个线程同时访问我的Singleton中的方法时,会发生什么,它会崩溃。这意味着在我的类中,我有一些从磁盘读取和写入文件的方法。那么,克服这种情况的最佳方法是什么呢。我必须使用锁或同步方法。。。。帮助我理解这些事情。使用dispatch\u once来保证初始化只在第一次调用该方法时发生 + (NSArray *)foo { static NSArray *_sharedFoo; static dispatch_once_t

我正在尝试构建一个单例缓存类。现在我遇到了一个问题,当两个线程同时访问我的Singleton中的方法时,会发生什么,它会崩溃。这意味着在我的类中,我有一些从磁盘读取和写入文件的方法。那么,克服这种情况的最佳方法是什么呢。我必须使用锁或同步方法。。。。帮助我理解这些事情。

使用
dispatch\u once
来保证初始化只在第一次调用该方法时发生

+ (NSArray *)foo
{
    static NSArray *_sharedFoo;
    static dispatch_once_t count = 0;

    dispatch_once(&count, ^{
        _sharedFoo = [[Foo alloc] init];
    });

    return _sharedFoo;
}
编辑
有关使用dispatch API的更多详细信息,请参阅

So。。。你刚才在最后回答了你自己的问题吗?我必须使用锁还是同步方法。。。谁能给我举个例子……我只想在底层的散列映射周围使用一个锁。我不确定具体的代码,因为我从来没有做过任何C语言的东西。这篇文章可能有助于理解@synchronized[[1]:synchronized很慢,如果你想确保singleton中的某些东西一次只运行一次,或者更好地使用grand central dispatch queues,请使用OSAtomic: