addTarget:self versus addTarget:nil



我是iOS开发新手。当我以编程方式添加按钮时,我有点困惑。当我们给按钮分配一个目标时,比如:

[button addTarget:self action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];

[button addTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];

在两种情况下都调用CallMe方法。有人能解释一下这两行代码的区别吗?如果有人能专门解释一下addTarget的工作原理,那就更有帮助了。非常感谢。援助将被挪用。

如果您将self或任何其他对象添加为动作消息的目标,则消息将恰好发送到该对象。

添加nil作为目标意味着将在运行时触发消息时搜索实际目标。查找从第一个响应者对象开始,然后沿着响应者链继续查找,即通过尝试nextResponder方法返回的对象,直到找到实现该方法的对象。请参阅事件处理指南,了解有关准确查找顺序的更多信息。

根据Apple的文档,

目标对象是send到addTarget方法的参数——也就是说,动作消息被发送到的对象。如果该值为nil,则在响应器链中搜索愿意响应动作消息的对象。

如果你想移除动作,你可以传递nil来移除所有与动作配对的目标以及remove target方法中指定的控制事件,

[button removeTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside];

以下是苹果UIControl类文档中Target参数的描述:

目标目标对象——即向其发送操作消息的对象。如果该值为nil,则在响应器链中搜索愿意响应动作消息的对象。

最新更新