我正在寻找类似的行为
[[NSNotificationQueue defaultQueue] enqueueNotification:not postingStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName|NSNotificationCoalescingOnSender forModes:nil];
但不使用通知,以某种方式将选择器或块排入队列而不是通知。
至于我的动机(只是看看这是否是一种合法的做法)。我在一个视图中添加了多个子视图,显然没有办法知道有多少,所以每次我添加一个子视图时,我都必须通过调用layoutIfNeeded
以特定方式布局子视图来执行一些计算。现在,我在想,如果我只能在 runloop 空闲时调用该方法(以某种方式推迟调用并合并它),那么在它执行布局计算时所有子视图都已经添加了。希望这是有道理的。
-(void)layoutSubviews
{
[super layoutSubviews];
UIView* prevView = nil;
for (NSUInteger i=0; i<[self.subviews count]; i++) {
UIView* view = self.subviews[i];
CGFloat spacing = prevView!=nil?self.spacing:0;
view.topLeft = CGPointOffset(prevView.bottomLeft, spacing, 0);
prevView = view;
}
[self fitSubviews];
}
添加了我的layoutSubview
方法中的代码。