使用target-c的updateTrackingAreas ...使用super和alloc

时间:2019-06-23 19:20:01

标签: objective-c mouseevent

我需要跟踪鼠标的移动位置。理想情况下,我想使用“ setAcceptsMouseMovedEvents”,它将由窗口或子类NSView捕获。但是我不确定放在哪里。因此,我将通过updateTrackingAreas跟踪鼠标的移动。

- (void) updateTrackingAreas {
    [self removeTrackingArea:trackingArea];
    trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
        options:(NSTrackingActiveAlways | NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved)
        owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
    [super updateTrackingAreas];
}

我的问题是这些:

  1. 在代码中,使用alloc。我需要释放这个吗?如果是这样,该在哪里做?

  2. 在代码结尾,将调用“ super”。我把它放在那儿是因为通常建议打电话给父母。但是,我仅跟踪一个区域,因此不确定是否需要该区域。可以让我知道是否真的需要吗?

  3. 由于未使用setAcceptsMouseMovedEvents,是否需要使用NSTrackingActiveWhenFirstResponder?我似乎没有,但是我可能错了?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  1. 如果ARC(Automatic Reference Counting)已打开,则ARC将释放trackingArea

  2. 摘自updateTrackingAreas的文档:

  

您的实现应调用super。

  1. 摘自NSTrackingActiveWhenFirstResponder的文档
  

当视图是第一响应者时,所有者将收到消息。此值指定何时激活由NSTrackingArea对象定义的跟踪区域。