> On 14 Mar 2016, at 14:17, Quincey Morris
> <[email protected]> wrote:
>
> On Mar 13, 2016, at 23:50 , Gerriet M. Denkmann <[email protected]> wrote:
>>
>> - (void)computeSomething
>> {
>> self.message1 = @“Start computing”;
>> // some seconds of computations
>> self.message1 = @“Result = 42”;
>> }
>
> Assume, conceptually, that drawing only takes place asynchronously (that is
> to say, setting a new value on the string invokes setNeedsDisplay, that’s
> all), and it’s obvious why this isn’t going to work.
>
> But the real issue is not that the text field won’t update, it’s that you’re
> blocking the main thread with computation. You should move the computation
> off the main thread — using dispatch_async to a default queue. At the end of
> the computation, go back to the main thread (dispatch_async again, specifying
> the main queue this time) and put the result in the text field.
>
> This is, of course, going to introduce threading issues into your design. If
> the background thread keeps its results private (within the thread) until you
> switch back to the main thread, you can actually update any permanent data
> structures on the main thread, avoiding the need for locks or other
> synchronization techniques. However, you have to arrange for the main thread
> to avoid trying to use the results before the background computation is done,
> or to start any new computations, until the old ones are done, as far as such
> safety checks are necessary for your app.
>
> (You can use NSOperationQueue instead of GCD, but I don’t see a lot of
> advantage in that. The consequences are the same.)
You are absolutely right that a background would be the right thing.
But this is just a small tool for testing, and it will not take more than a few
seconds, so I am trying to avoid this.
But I have found a solution (you mentioning setNeedsDisplay was a great help):
- (void)computeSomething
{
self.textField1.stringValue = @“Start computing”;
[self.textField1 display];
// some seconds of computations
self.textField1.stringValue = @“Result = 42”;
}
Gerriet.
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]