我想要传递一个NSSet对象performSelector
- 调用:
NSSet *myNSSetObject = [self getSet];
if (myNSSetObject.count != 1)
return;
[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5];
问题是对象在myMethod
中到空。由于performSelector保留了传递的Object,我不明白出了什么问题。
我的方法定义如下
- (void)myMethod:(NSSet *)myNSSetParam {
NSLog(@"Set count: %d", myNSSetParam.count);
[do sth];
}
NSLog显示: 设定数:0
深入研究这个问题并且已经通过上面的计数建议,实际上传递了NSSet对象,但丢失了它的记录。
是不是NSSet保留了它的对象?
答案 0 :(得分:1)
myMethod
是否真的采取了争论?值得注意的是,Objective-C中的方法名称和选择器实际上包含声明中存在的冒号;因此,这样的方法:
- (void)myMethod:(NSSet *)set;
必须使用@selector(myMethod:)
引用,包括尾部冒号。
答案 1 :(得分:1)
从第一条消息返回后(或部分在发布的代码片段下方),您是否意外更改NSSet
发送的[self getSet]
?如果您之后从集合中删除对象,myMethod:
将无法再访问它。
答案 2 :(得分:0)
你应该致电
[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5];
而是(注意消息名称后面的冒号)。
答案 3 :(得分:0)
你的意思是
[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]
假设myMethod:
是一个获取对象的方法?
答案 4 :(得分:0)
你确定getSet
返回一个实际的NSSet
而不是隐藏在NSSet
“基指针”下的可变子类吗?如果它是可变的,则可以在0.5秒延迟内修改该组。即使performSelector:withObject:afterDelay:
保留了该集合,也不会阻止它被修改。