Когда следует переопределить updateTrackingAreas
Так что у меня довольно большой NSScrollView
с несколькими пользовательскими представлениями. В этих пользовательских представлениях я переопределяю -(void)updateTrackingAreas
как это:
- (void)updateTrackingAreas
{
[self removeTrackingArea:trackingArea];
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
options:(NSTrackingCursorUpdate |
NSTrackingActiveWhenFirstResponder |
NSTrackingInVisibleRect)
owner:self
userInfo:nil];
[self addTrackingArea:trackingArea];
}
Но почему-то я чувствую, что это немного неэффективно, поскольку у меня есть около 50 экземпляров моего пользовательского представления в NSScrollView, и только около 5 из них видны одновременно, и таким образом я обновляю области отслеживания невидимых представлений.
Поэтому я подумал, что не буду обновлять области отслеживания, если представление не находится в видимом прямоугольнике NSScrollView. Что-то вроде:
- (void)updateTrackingAreas
{
if(!NSIntersectsRect([self frame], [[self superview] visibleRect]))
{
return;
}
// ...
}
Кажется, это работает хорошо, но я не уверен, что это безопасно.
У кого-нибудь есть советы по этому вопросу?