Я новичок в Swift, так что извините, если что-то кажется очевидным, но я не могу понять следующее. Я пытаюсь выполнить команду терминала из моего приложения в бесконечном цикле while. Мой код выглядит следующим образом:
import Cocoa
class ViewController: NSViewController {
func test() {
let sleepProcess = Process()
sleepProcess.executableURL = URL(fileURLWithPath: "/bin/echo")
sleepProcess.arguments = ["test"]
try? sleepProcess.run()
sleepProcess.waitUntilExit()
}
override func viewDidLoad() {
super.viewDidLoad()
while true {
test()
}
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
Проблема в том, что приложение, когда я открываю монитор активности, открывает более 1000 портов за считанные секунды запуска приложения (из-за запуска процесса).
Я обнаружил, что мне нужно использовать autoreleasepool для освобождения этих портов, чтобы они не оставались открытыми. Это то, что я пробовал, но все равно порты остаются открытыми:
import Cocoa
class ViewController: NSViewController {
func test() {
let sleepProcess = Process()
sleepProcess.executableURL = URL(fileURLWithPath: "/bin/echo")
sleepProcess.arguments = ["test"]
try? sleepProcess.run()
sleepProcess.waitUntilExit()
}
override func viewDidLoad() {
super.viewDidLoad()
while true {
autoreleasepool(invoking: test)
}
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
Может кто-нибудь, пожалуйста, указать мне правильное направление? Спасибо!
Подключено: Swift macOS Process.run () утечка порта