Swift 为什么下面的代码会导致无限递归?
运行此操作会导致无限递归,最终导致EXC_BAD_访问崩溃。知道为什么会这样吗 奇怪的是,只有在定义了Swift 为什么下面的代码会导致无限递归?,swift,Swift,运行此操作会导致无限递归,最终导致EXC_BAD_访问崩溃。知道为什么会这样吗 奇怪的是,只有在定义了removedefinitionobject时才会发生这种情况。如果我删除该功能,问题就会消失。来自“键值编码编程指南” (我的重点): mutableSetValueForKey:的默认搜索模式如下: 在接收方的类中搜索名称与 模式addObject:和removeObject:(对应于 NSMutableSet基本方法addObject:和removeObject: 分别)和添加:和删除:
removedefinitionobject
时才会发生这种情况。如果我删除该功能,问题就会消失。来自“键值编码编程指南”
(我的重点):
mutableSetValueForKey:
的默认搜索模式如下:
- 在接收方的类中搜索名称与
模式
和addObject:
(对应于removeObject:
基本方法NSMutableSet
和addObject:
分别)和removeObject:
和添加:
(对应于 NSMutableSet方法unionSet:和minusSet:)。 如果至少找到一种添加方法和至少一种删除方法删除:
将生成发送到集合代理对象的消息 在NSMutableSet
,添加对象:
,删除对象:
的某些组合中, 和添加:
发送给原始收件人的消息remove:
mutableSetValueForKey:
addDefinitionsObject
和removedDefinitionObject
然后,在您的类中实现
class TestClass : NSObject {
var definitions: NSSet = NSSet()
func addDefinitionsObject(value: AnyObject) {
self.mutableSetValueForKey("definitions").addObject(value)
}
func removeDefinitionsObject(value: AnyObject) {
// this method is never called
self.mutableSetValueForKey("definitions").removeObject(value)
}
}
var test = TestClass()
test.addDefinitionsObject("yo")
召唤
因此产生了递归。Wow,生成的列表变量?将addDefinitionsObject的名称更改为其他名称也可以解决这个问题,这看起来很奇怪。你想实现什么?
self.mutableSetValueForKey("definitions").addObject(value)
self.addDefinitionsObject(value)