小编MrM*_*age的帖子

在视图外部释放鼠标按钮时,NSView不会收到mouseUp:event

我有一个自定义NSView子类(例如)以下方法:

override func mouseDown(with event: NSEvent) { Swift.print("mouseDown") }
override func mouseDragged(with event: NSEvent) { Swift.print("mouseDragged") }
override func mouseUp(with event: NSEvent) { Swift.print("mouseUp") }
Run Code Online (Sandbox Code Playgroud)

只要按下鼠标(按钮),拖动并释放所有视图内部​​,这都可以正常工作.但是,当在视图内按下鼠标时,移动到视图外,然后才释放,我从未收到过该mouseUp事件.

PS:调用super实现没有帮助.

cocoa event-handling nsview appkit mouseup

4
推荐指数
1
解决办法
1269
查看次数

PostgreSQL autovacuum 导致性能显着下降

我们的 Postgres 数据库(托管在具有 1 个 CPU、3.7 GB RAM 的 Google Cloud SQL 上,见下文)主要由一个大约 90GB 的大表组成,大约有大约 6000 万行。使用模式几乎完全由附加和靠近表末尾的一些索引读取组成。有时会删除一些用户,删除散布在表中的一小部分行。

这一切正常,但每隔几个月就会在该表上触发自动清理,这会显着影响我们服务的性能约 8 小时:

  • 在 autovacuum 期间(几个小时),存储使用量增加了约 1GB,然后慢慢恢复到以前的值(由于 autovacuum 释放页面,最终可能会低于它)
  • 数据库 CPU 利用率从 <10% 跃升至 ~20%
  • 磁盘读/写操作从接近零增加到约 50/秒
  • 数据库内存略有增加,但保持在 2GB 以下
  • 正如预期的那样,事务/秒和入口/出口字节也相当不受影响

这会在 autovacuum 期间将我们服务的第 95 个延迟百分位数从 ~100ms 增加到 ~0.5-1s,从而触发我们的监控。该服务每秒处理大约 10 个请求,每个请求由一些简单的 DB 读/写组成,每个请求的延迟通常为 2-3 毫秒。

以下是一些说明问题的监控屏幕截图:

CPU使用率 存储使用 内存使用情况 读/写操作 潜伏

数据库配置相当普通:

数据库配置

记录此 autovacuum 过程的日志条目如下所示:

system usage: CPU 470.10s/358.74u sec elapsed 38004.58 sec
avg read rate: 2.491 MB/s, avg write rate: 2.247 MB/s
buffer usage: 8480213 hits, 12117505 …
Run Code Online (Sandbox Code Playgroud)

postgresql google-cloud-sql postgresql-performance autovacuum

3
推荐指数
1
解决办法
2133
查看次数

如何从任何UIView的UITableViewStyleGrouped获取背景图像?

我希望UIView与具有UITableViewStyleGrouped样式的UITableView具有相同的背景(例如,在设置应用程序中看到的灰白色图案).这可能吗?

提前致谢

MrMage

iphone objective-c uiview

2
推荐指数
1
解决办法
1388
查看次数

哪个是带UIBarButtonItemStyleDone的UIBarButtonItem的tintColor?

我想使用带有两个按钮的UISegmentedControl来代替单个"完成"按钮.为此,我需要知道UIBarButtonItems的tintColor和UIBarButtonItemStyleDone.

欢呼并提前谢谢

MrMage

iphone uibarbuttonitem uibarbuttonitemstyle

2
推荐指数
1
解决办法
1656
查看次数

如何用Objective C杀死一个线程?

我调用了第三方C++库,我已将其放入自己的线程中(目前使用的是NSThread).我想让用户能够停止执行该线程.(我很清楚这可能导致的所有问题,但我仍然希望这样做.)

根据Apple的线程编程指南,Cocoa有可能这样做.这对iPhone来说也是如此,还是我必须依靠Posix线程来实现我的目标?

干杯

MrMage

iphone cocoa multithreading kill objective-c

2
推荐指数
1
解决办法
1万
查看次数

GLKit/OpenGLES 2.0:如何排序基元?

我想用 GLKit 绘制半透明图元。我已经通过禁用深度测试glDisable(GL_DEPTH_TEST)并通过启用混合

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

现在,对于较大的 alpha 值(例如 0.9),我需要首先绘制最远的三角形,这样它们就不会出现在较近的三角形上方。glBlendFunc 的文档中也说明了这一点:

透明度最好使用混合函数(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)来实现,其中图元从最远到最近排序。请注意,此透明度计算不需要帧缓冲区中存在 alpha 位平面

在OpenGL 透明度常见问题解答中:

在应用程序中使用深度缓冲时,您需要注意渲染图元的顺序。需要首先渲染完全不透明的图元,然后按从后到前的顺序渲染部分不透明的图元。如果不按此顺序渲染图元,则通过部分不透明图元可见的图元可能会完全失去深度测试。

但由于视角可以改变(当我改变渲染效果时modelViewMatrix),从远到近的顺序取决于当前的视角。

有没有办法让 OpenGL 以正确的顺序自动渲染我的图元,如果没有,最好的方法是什么?我认为计算 z 位置(取决于当前视角)并为每帧订购几千个三角形(或者更准确地说,每次视角变化时,可以是每帧)的成本太高,特别是当我需要为每一帧将此订单推送到 GPU 时。

请注意,我不关心使用纹理(只是彩色顶点)。

geometry transparency opengl-es opengl-es-2.0 glkit

1
推荐指数
1
解决办法
781
查看次数

如何猴子修补在另一个函数中声明的函数

假设我有以下代码:

window.foo = function() {
  bar();
  function bar() {
    console.log('hello');
  }
}
/* insert monkey-patching code here */
foo();
Run Code Online (Sandbox Code Playgroud)

我可以用什么代码替换/* insert monkey-patching code here */以使其例如写入goodbye而不是hello在控制台上?

我尝试了以下方法来覆盖bar,但它不起作用:

window.foo = function() {
  bar();
  function bar() {
    console.log('hello');
  }
}
window.bar = function() {
  console.log('goodbye');
}
window.foo.bar = function() {
  console.log('goodbye');
}
foo();
Run Code Online (Sandbox Code Playgroud)

javascript monkeypatching

0
推荐指数
1
解决办法
262
查看次数