我正在尝试生成一个新线程来进行一些后台处理,基于我已经分解成一个字符数组的String。这是我的代码的样子:
var testString : String = NSString(data:data!, encoding:NSUTF8StringEncoding)
var testStringArray : Array<Character> = []
for character in testString
{
if(!(self.isCharacterStrippable(character)))
{
testStringArray.append(character)
}
}
NSThread.detachNewThreadSelector("fillKeysFromArray:", toTarget: self, withObject: testStringArray)
我收到编译器错误,告诉我“数组不符合协议AnyObject”。
没有为我的数组编写一个对象包装器,或者将它设置为一个实例变量(两者看起来都有点过分),有什么方法可以将这个数组传递给新的线程吗?
答案 0 :(得分:1)
从长远来看,使用Grand Central Dispatch会更容易。您可以在后台线程上运行您的函数,例如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
[weak self] in // This is so that we don't create a reference cycle
self?.fillKeysFromArray(testStringArray);
return
}
您可以阅读Grand Central Dispatch以及它在Apple Concurrency Programming Guide中提供线程和并发性时提供的所有好处。
答案 1 :(得分:0)
根本原因是detachNewThreadSelector
只能接受NSMutableArray
参数的withObject
。如果使testStringArray
为NSMutableArray
类型的变量,则可以删除编译器错误消息。
话虽如此,你应该认真考虑Bryan Chen和Mike S的建议,转而使用GCD。