我在AlamoFire中是否需要[无主自我],还是已经得到了照顾


        let parameters = [
            "access_token": access_token,
        ]
        self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/auth", parameters: parameters).responseJSON { [unowned self]
            response in
            self.startWorking()
        }

我是否需要在关闭中拥有无主的自我,或者它已经被图书馆处理过?

使用Alamofire.request而不是self.alamoFireManager,你就可以不用捕捉自我了。如果你真的需要使用self.alamoFireManager,正如@Tapani提到的,由于alamoFireManager是自我的属性,你需要捕获自我并在闭包中使用[弱自我]

我一直在寻找与您正在寻找的答案相同的答案。我找到了这个答案。它提到了一篇关于保留周期的文章。我认为你不需要在这里捕捉自我。

你的问题是一个很好的问题,简单的答案是不,你不需要在你的响应处理程序中使用[unowned self][weak self]来使Alamofire正常工作。选择是 100% 取决于你(调用方),你是否创建了自己的SessionManager(如本例所示),或者你是否正在使用利用SessionManager单一实例的 Alamofire.request API。

阿拉莫火内件

请求本身的内存管理全部在 Alamofire 内部利用 GCD 队列进行管理。如果发出请求,只要发出请求SessionManager保留在内存中,该请求就会完成并调用完成处理程序。单例SessionManager显然不会从内存中释放。

如果您创建了自己的SessionManager,请确保在请求完成之前不要释放它。

其他想法

这里的问题不应该是关于你是否需要为了阿拉莫菲尔而使用无主或弱小的自我,而是为了你自己。是否保证请求成功完成?如果是,那么您需要在此处捕获自我,并避免弱和无主的自我,以确保请求完成。例如,假设此示例中的self是一个Network类。如果您在请求进行时解除分配Network类,这也会解除分配您的自定义alamoFireManager实例,这将使底层URLSession无效,进而取消您的请求。通常,您不希望发生这种情况,并且希望在响应处理程序中捕获自身,以确保它不会过早关闭。

alamoFireManagerself的属性,所以如果它将闭包保存到属性并且您捕获了self则存在保留周期。如果您不确定是否应始终使用 weak self .这没有坏处,但在需要时不使用它可能会造成很多麻烦。此外,unowned self是危险的,因为它不是可选的。如果它是nil并且您尝试使用它,则应用程序会崩溃。您应该改用weak self

最新更新