gpt4 book ai didi

swift - Reactive Cocoa swift 3.0 上的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 12:44:18 25 4
gpt4 key购买 nike

我是 Reactive Cocoa for Swift 的新手,正在尝试为我的 Web 服务调用创建自定义信号。我在探查器上遇到内存泄漏,但是我不知道在哪里处理信号以避免泄漏。

public func GetGroups() -> Signal<[GroupModel], SError>? {

let accToken:String? = KeychainWrapper.standard.string(forKey: "access_token")
let headers = ["Authorization":"Bearer " + accToken!]

let signal = Signal<[GroupModel],SError>({(obs:Observer<[GroupModel],SError>) -> Disposable?
in
Alamofire.request(serverUrl+"/api/group/groups",method:HTTPMethod.get,parameters:nil,encoding:URLEncoding.default,headers:headers)
.responseArray(completionHandler: {(data:DataResponse<[GroupModel]>) -> Void in

if data.error != nil{

//handle error

}else{
obs.send(value: data.result.value!)
}


})
return nil
})

return signal;

}

这就是我调用该服务的方式。

_ = groupService.GetGroups()?
.observeResult{
self.dataSource = $0.value
self.collectionView?.reloadData()


}

最佳答案

通常,您应该使用 SignalProducer 而不是 Signal 来发出网络服务事件。

您的代码中有两个主要问题。

  • 在您的信号实现中,您的信号将来不会完成,这意味着您的观察者将始终存在,这会导致内存泄漏。
  • 在你的观察 block (作为观察者)中,直接使用的self将被捕获在strong中,如上所述,你的观察者将在那里,这样 self 无法以正确的方式释放。

关于swift - Reactive Cocoa swift 3.0 上的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com