Thank you all for the opinions. I left the code as-is in terms of
binding, but changed my rate calculations to use a weighted running
average. After doing so, the estimated seconds tick by one at a time
for the most part, and the rate is more constant. This is a tool for
me and some co-workers, so at this point, it is good enough. But the
ideas are sound and if it bothers me enough, I may decouple the UI
from the model by not using bindings at some point and use a timer
based approach.

On Sat, Jan 14, 2012 at 10:37 AM, Kyle Sluder <kyle.slu...@gmail.com> wrote:
> On Jan 14, 2012, at 2:53 AM, Marcel Weiher <marcel.wei...@gmail.com> wrote:
>
>> Hi Andrew,
>>
>> On Jan 13, 2012, at 6:57 , Andrew wrote:
>>
>>> The result of this is that the UI updates really frequently and the
>>> estimated time to complete and the download rate jump around a lot. I
>>> would love it if I could tell cocoa to only update the UI once per
>>> second instead of immediately when the property key changes.
>>
>> You shouldn't push updates to the UI, the UI should query the model, and it 
>> should do it at "human speed", not at whatever speed the machine can manage 
>> to change the state.  There are a bunch of reasons for this, not least is 
>> that UI updating is fairly heavyweight and you can actually impact your 
>> performance (significantly, in some cases).
>
> Be careful here. This is good advice in this particular circumstance, but in 
> general pushing values to the UI is good and common design. The UI will 
> register as a KVO observer, or as an NSNotification observer, or perhaps the 
> controller will just call -setObjectValue: directly.
>
> Breaking this pattern should be a conscious decision. For example, you don't 
> push a value to cell-based NSTableViews; you tell the table view it needs to 
> ask you for the values at certain indexes. This is because cell-based table 
> views are an optimization that avoids keeping tons of view objects around.
>
> But view-based table views behave just like any other view: you push updates 
> directly to the controls contained within your table cell view.
>
> In Andrew's case, it's clear that he should deviate from the norm, and the UI 
> should be in charge of asking for the latest value at a rate that makes 
> sense, probably controlled by an NSTimer.
>
> --Kyle Sluder
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to