我的应用程序包含以下单个.m
文件:
#import <Cocoa/Cocoa.h>
int main(int argc, char* argv[]) {
[[[NSThread alloc] initWithBlock: ^{
sleep(2);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Stop");
[[NSApplication sharedApplication] stop:nil];
});
}] start];
[[NSApplication sharedApplication] run];
NSLog(@"Run finished");
return 0;
}
根据the developer documentation,stop
应停止主循环(run
),但它不会(至少不在OS X 10.12和10.13上)。还有terminate
,但这很快就退出了该计划。我还尝试设置一个NSApplicationDelegate
来实现applicationShouldTerminate
,但是从不调用它。
如何确保主要运行循环(干净地)退出?
注意:共享应用程序主循环是必要的,因为其他地方正在进行UI工作。更具体地说,这会在Go WDE UI库中产生问题,该库使用Cocoa为Go应用程序提供一个窗口。
答案 0 :(得分:2)
[C]从定时器或运行循环观察器例程中获取此方法不会停止运行循环,因为它们不会导致发布NSEvent对象。
调度到主队列的块类似,因为它不发布事件。您可以在致电<script src="<?php echo base_url() ?>dropdown/js/jquery.js"></script>
<script src="<?php echo base_url() ?>dropdown/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var cat_id = $("#category option:selected").val();
if(cat_id != '')
$.fn.ajaxCall(cat_id);
ajaxCall(category_id);
$('#category').on('change', function(){
var category_id = $(this).val();
if(category_id != '')
$.fn.ajaxCall(category_id);
});
$.fn.ajaxCall = function(category_id){
$.ajax({
url:"<?php echo base_url() ?>welcome/get_sizes",
type: "POST",
data: {'category_id' : category_id},
dataType: 'json',
success: function(data){
$('#sizes').html(data);
},
error: function(){
alert('Error occur...!!');
}
});
}
});
</script>
后尝试发布NSEventTypeApplicationDefined
个活动。
答案 1 :(得分:0)
在进一步研究之后,似乎UI循环stop
请求仅在 UI 事件之后处理(因此不仅仅是在主循环事件之后)。因此,它可以响应UI事件,但不会像我在我的示例中那样在线程中工作。
在stop
请求后触发UI事件(例如,程序化调整大小对我有用)会导致循环结束。