Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 课程方法及;线程安全(NSJSONSerialization)_Ios_Objective C_Cocoa_Thread Safety - Fatal编程技术网

Ios 课程方法及;线程安全(NSJSONSerialization)

Ios 课程方法及;线程安全(NSJSONSerialization),ios,objective-c,cocoa,thread-safety,Ios,Objective C,Cocoa,Thread Safety,在我的iOS应用程序中,我正在后台线程中做一些工作(使用performSelectorInBackground)。在这个线程中,我使用NSJSONSerialization及其类方法来解析JSON字符串: self.json = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil]; 这个类方法(JSONObjectWithData)是线程安全的吗?我能肯定这一点吗?文档中写在哪里 我知道实例方法通常不是线

在我的iOS应用程序中,我正在后台线程中做一些工作(使用
performSelectorInBackground
)。在这个线程中,我使用NSJSONSerialization及其类方法来解析JSON字符串:

self.json = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil];
这个类方法(
JSONObjectWithData
)是线程安全的吗?我能肯定这一点吗?文档中写在哪里


我知道实例方法通常不是线程安全的,除非文档说它们是线程安全的。除非另有规定,否则我一般可以说类方法是线程安全的吗?

托管内容不是线程安全的。您可以在主线程上运行代码,也可以在后台运行代码,并在后台线程完成处理后使用NSNotificationCenter开始重新加载UI。

我在这里有点猜测

美国

不可变对象通常是线程安全的;一旦你创建了它们,你就可以 可以安全地在线程之间传递这些对象


调用类方法意味着向类对象发送消息,而类对象是不可变的。我的结论是,从不同的thead调用类方法是安全的。

我刚刚在Apple开发者论坛上发布了一个类似的问题。我得到的答复是NSJSONSerialization是线程安全的:


问题(据我所知)是从多个线程同时调用
[NSJSONSerialization JSONObjectWithData:…]
是否安全,而不是从后台线程修改UI。最好的方法是对[NSJSONSerialization JSONObjectWithData:]调用执行并行操作,看看你是否有重入问题。如果没有人告诉您它是线程安全的,那么它就不是线程安全的;)不幸的是,描述线程安全性的文档似乎尚未更新以显示
NSJSONSerialization
。如果您想使用self.json,如果您使其线程安全,那么它会工作吗?除非类方法涉及全局状态,这可能很难确定。