objective c - NSRunAlertPanel caused performance issue on multithreading -
occasionally have popup alert window in cocoa code segments. used nsalert
directly have runmodal
go while found nsrunalertpanel
more easier achieve goal. decided switch alert functions nsrunalertpanel
. seemed okay @ time。
now i'm adding multithreading. found nsrunalertpanel
appears slower nsalert
when calling in main thread.
code segments:
firstly create thread:
[nsthread detachnewthreadselector: @selector(tryrunloop:) totarget:self withobject:nil];
then functiontryrunloop
in thread call alert window function in main thread:
while(1) [self performselectoronmainthread:@selector(showalert:) withobject:anobject waituntildone:yes];
the function showalert
in main thread rest things:
nsrunalertpanel(@"warning:",@"just testing", @"yes", nil, nil);
as time goes response of popup window appears slower , slower.if use nsalert
instead of nsrunalertpanel
, or did not run popup method in main thread, symptom should disappear.
i found cpu usage different between these 2 methods. nsalert
costs low cpu usage while hitting button time.
is able explain these phenomenons?
ps: not allowed put whole original project online i've created simple cocoa project in github simulate symptom , url ,please take @ known issues
in readme file @ first.
alright, short answer don't use nsrunalertpanel
. family of functions have been discouraged time now, , superseded nsalert
. use nsalert
instead.
(unfortunately class reference nsrunalertpanel
etc. doesn't mention this; i'm trying remember first documented; perhaps release note)
Comments
Post a Comment