前面提到可以把may cause a leak当成安静的美代码忽略掉,但其实还是有另一种方法滴。
你可以用如下代码替换以消除該警告:
[xxx performSelector:_cmd withObject:nil afterDelay:0];
这样等于告诉编译器在选择器被触发执行时(fire)建立一个定时器。当涉及到用一个定时器完成选择器时,不可能返回一个值。因此编译器会停止抱怨。
在这个例子中,向一个没有参数的selector传递一个nil参数,会被简单的忽略掉。
但是因为这里现在涉及到定时器,并且尽管延时为0,selector仍然可能不会在当前帧渲染之前执行。
所以这可能会在selector执行前增加单个帧渲染的一点延时——但在关闭一个弹出菜单时不应该成为一个问题。