实现这样的模式的最佳方法是什么?具体来说,我想将一些依赖属性绑定到一个昂贵的方法,如果属性发生了变化,每次迭代运行循环需要调用一次.
可能的解决方案:
使用CAdisplaylink或NSTimer你可以得到这样的工作,但两者似乎都比必要的更多参与,我不确定将它添加到许多对象(尤其是计时器)的性能影响是什么.毕竟,性能是做这样的事情的唯一原因.
在某些情况下我使用过这样的东西:
- (voID)debounceSelector:(SEL)sel withDelay:(CGfloat)delay { [NSObject cancelPrevIoUsPerformRequestsWithTarget:self selector:sel object:nil]; [self performSelector:sel withObject:nil afterDelay:delay];}
这在用户输入应该仅在连续动作或类似事件时触发某些事件的情况下工作得很好.当我们想要确保触发事件没有延迟时,我们只想在同一个运行循环中合并调用,这似乎很笨拙.
解决方法 NSNotificationQueue就是你想要的东西.请参阅 Coalescing Notifications上的文档这是UIVIEwController中的一个简单示例:
- (voID)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];}- (voID)vIEwDIDLoad{ [super vIEwDIDLoad]; [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(configureVIEw:) name:@"CoalescingNotificationname" object:self]; [self setNeedsReload:@"vIEwDIDLoad1"]; [self setNeedsReload:@"vIEwDIDLoad2"];}- (voID)vIEwWillAppear:(BOol)animated{ [super vIEwWillAppear:animated]; [self setNeedsReload:@"vIEwWillAppear1"]; [self setNeedsReload:@"vIEwWillAppear2"];}- (voID)vIEwDIDAppear:(BOol)animated{ [super vIEwDIDAppear:animated]; [self setNeedsReload:@"vIEwDIDAppear1"]; [self setNeedsReload:@"vIEwDIDAppear2"];}- (voID)setNeedsReload:(Nsstring *)context{ NSNotification *notification = [NSNotification notificationWithname:@"CoalescingNotificationname" object:self userInfo:@{@"context":context}]; [[NSNotificationQueue defaultQueue] enqueueNotification:notification postingStyle:NSPostASAP coalesceMask:NSNotificationCoalescingOnname|NSNotificationCoalescingOnSender forModes:nil];}- (voID)configureVIEw:(NSNotification *)notification{ Nsstring *text = [Nsstring stringWithFormat:@"configureVIEw called: %@",notification.userInfo]; NSLog(@"%@",text); self.detailDescriptionLabel.text = text;}
您可以签出文档并使用postingStyle来获取所需的行为.在此示例中,使用NSPostASAP将为我们提供输出:
configureVIEw called: { context = vIEwDIDLoad1;}configureVIEw called: { context = vIEwDIDAppear1;}
意味着已经合并了对setNeedsReload的背靠背调用.
总结以上是内存溢出为你收集整理的ios – 在Cocoa Touch中实现Debounced / Coalesced模式,如`layoutSubviews`全部内容,希望文章能够帮你解决ios – 在Cocoa Touch中实现Debounced / Coalesced模式,如`layoutSubviews`所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)