【发布时间】:2020-03-18 10:51:48
【问题描述】:
我正在使用最新的 Swift 文档编写 NetService,它可以发布和搜索。但我无法从发布者那里删除服务。这里无法理解 RunLoop 的作用。但是,如果我终止该应用程序,则服务将被删除。
这是用于发布服务的代码。
class ServicePublisher : NSObject {
var nsNetService : NetService!
init?(domain : String, type : String, name : String, port : Int32){
nsNetService = NetService(domain: domain, type: type, name: name, port: port)
if nsNetService == nil{
return nil
}
}
func publish() {
nsNetService.publish(options:NetService.Options.listenForConnections)
}
func setDelegate(delegate : NetServiceDelegate) {
nsNetService.delegate = delegate
}
func stop(){
nsNetService.stop()
}
}
【问题讨论】:
-
stop不是即时的,实际上所有 NetService 方法都是异步的,您委托netServiceDidStop将在服务停止时通知您。由于 NetService 本质上是异步的,因此需要 RunLoop 来处理来自它的事件,NetService 的 RunLoop 可以在后台线程中运行,也可以是默认线程。 -
netServiceDidStop 在我调用 stop 后永远不会被调用。我无法理解 RunLoop 的作用。
-
@Asperi 我没有将按钮附加到应该在 NetService 上调用 stop 的函数,因此是问题所在。但我不需要为此配置 RunLoop,服务被删除,网络服务浏览器也能够检测到该服务被删除。
标签: ios swift bonjour nsnetservice