首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >withObject:self和withObject:nil的用法差异

withObject:self和withObject:nil的用法差异
EN

Stack Overflow用户
提问于 2012-06-16 14:34:24
回答 3查看 292关注 0票数 1

我一直在想下面的代码行

代码语言:javascript
运行
复制
[self performSelector:@selector(myMethod) withObject:self afterDelay:1.0];
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0];

上述两行代码之间的区别是什么。self

  • ,什么时候应该将对象设置为nil,什么时候应该将对象设置为nil

在大多数情况下,我注意到要将对象设置为nil

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-16 14:51:53

区别在于您是否要将对象传递给选择器。选择器所做的只是描述一个方法。

代码语言:javascript
运行
复制
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0];

有别于:

代码语言:javascript
运行
复制
[self performSelector:@selector(myMethod:usingThis:) withObject:nil afterDelay:1.0];

现在,如果您希望选择器(即方法)处理传入的某个对象,比如数组、字典或类。你使用withObject。如:

代码语言:javascript
运行
复制
[self performSelector:@selector(myMethod:) withObject:myDictionary afterDelay:1.0];

-(void)myMethod:(NSDictionary*)dictionary
{
// Do something with object
}

您可以传递任何内容,包括对当前类的引用(例如self),就像在示例中所做的那样。

票数 0
EN

Stack Overflow用户

发布于 2012-06-16 14:41:48

在您列出的示例中,您不会遇到任何不同的行为,因为您的方法myMethod没有参数。这是有用的地方,是当你有一个方法,接受参数。

假设我们声明了一个方法,squareRootMethod:,它接受一个NSNumber并返回squareRoot。然后你会打电话给[self performSelector:@selector(squareRootMethod:) withObject:numberToRoot afterDelay:1.0]

也有用于选择器的performSelector:withObject:withObject:之类的方法,这些方法包含多个参数。

票数 8
EN

Stack Overflow用户

发布于 2012-06-16 14:38:34

在第一个示例中,您将self作为参数传递给调用方法时传递给它。但是你的方法不需要参数,所以它是不必要的模糊。

在第二个示例中,您传递了nil,因此方法被传递给它不存在的参数,然后终止。这在某种意义上更“有效”,因为您的方法不需要任何参数,而“零”。是等于NULL的对象,那么不管怎么说,您都可以传递更少的不被忽略的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11064294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档