Ios 课程方法及;线程安全(NSJSONSerialization)
在我的iOS应用程序中,我正在后台线程中做一些工作(使用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)是线程安全的吗?我能肯定这一点吗?文档中写在哪里 我知道实例方法通常不是线
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,如果您使其线程安全,那么它会工作吗?除非类方法涉及全局状态,这可能很难确定。