public function times($event, $limit, callable $listener)
{
if ($limit === 0) {
return $this->on($event, $listener);
}
if (!isset($this->eventListeners[$event])) {
$this->eventPointers[$event] = 0;
$this->eventListeners[$event] = [];
}
$pointer =& $this->eventPointers[$event];
$limit = $limit > 0 ? $limit : 1;
$eventListener = new EventListener($this, $event, $listener, $this->attachTimesListener($pointer, $event, $limit, $listener));
$this->eventListeners[$event][$pointer++] = $eventListener;
return $eventListener;
}