我是 mac os x 编程的新手,刚刚接到一个任务来编写基于配置禁用无线或有线适配器的小型实用程序。我能够使用 corewlan 框架断开无线连接,例如:
CWInterface interface = [CWInterface interfaceWithName:@"en1"];
BOOL result = [interface setPower:NO error:&err];
Run Code Online (Sandbox Code Playgroud)
它按预期工作。我需要类似的代码来禁用/断开以太网适配器。我研究了 ifconfig (如下所述可以使用):
sudo ifconfig en0 down
Run Code Online (Sandbox Code Playgroud)
但它需要管理员密码,而我不想这样做。请建议另一种编程方式来禁用没有 root 密码的以太网适配器。
我读到可以使用SCNetworkConfiguration但不知道如何使用它。请帮忙。
谢谢
我正在处理图像的应用程序。这就像用户最多放置 4 个图像,然后应用程序根据用户选择的模板对它们进行布局。一张图片可能会在最终视图中添加 2-3 次。
布局中的每个图像都是在 NSView 中绘制的(NSView 的 drawRect 方法使用 drawInRect 方法)。现在最终图像(通过布局所有图像的组合图像)是通过将 NSView 保存为 Image 来创建的,并且一切正常。
现在我面临的问题是一旦所有处理完成,内存就会被应用程序保留。我使用了仪器分配,我没有看到内存泄漏,但我看到“持久字节”随着应用程序的每个会话不断增加,并且一个用户报告了 GB 中的问题。请看截图。
当我在 Instruments 中进一步调查时,我在下面看到了导致内存保留的应用程序代码快照。所有都与 ImageIO 和 coreImages 相关。从仪器看下面:

然而,这似乎只是 10.10 及以上系统的问题。在 10.9.x 中测试了相同版本的应用程序,内存使用量仍为 60MB。在应用程序中执行会话期间,它会达到 200MB,但一旦完成,它会恢复到 50-60MB,这对于应用程序来说是常见的。
[_photoImage drawInRect: self.bounds fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0 respectFlipped: YES hints: nil];
_photoImage = nil;
Run Code Online (Sandbox Code Playgroud)
上面的代码我用来在 NSView 的 drawRect 方法中绘制图像,图像中显示的代码用于将 NSView 获取为 Image。
更新:经过我的进一步调查,我发现它的CGImageSourceCreateWithData被缓存NSImage中的TIFF数据。我更多地使用下面的代码来裁剪图像,如果我取消注释它,内存消耗就可以正常工作。
NSData *imgData = [imageToCrop TIFFRepresentation];
CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)imgData, NULL);
CGImageRef maskRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
CGImageRef …Run Code Online (Sandbox Code Playgroud)