繁体   English   中英

这是在闭包中使用弱自我的正确位置吗?

[英]Is this the correct place to use weak self in closure?

我有一个带有 collectionView 插座的 viewController。 在 cellForRowAt 方法中,我调用此代码:

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as? MediaPhotoCell else {fatalError("Could not initialize cell")}
       cell.configureForMedia(obj, completion: { [weak self](image:UIImage?) in
            if let loadedImage = image {
                    let photo = self?.loadedPhotos[indexPath.row]
                    photo?.image = loadedImage
                    self?.loadedPhotos[indexPath.row] = photo
                    self?.photosViewController?.updateImage(for: photo)
                }
            })
return cell

我一直在花时间学习如何通过保留周期解决/防止内存泄漏。 在捕获闭包中的值之前,我添加了一个捕获列表 [weak self](图像:UIIimage?)。 我的逻辑是,由于 viewController 拥有集合视图,而该集合视图拥有单元格,该单元格在其自定义实现(自定义单元格)中有一个闭包方法,并且闭包引用了 self,如果我不将 self 声明为,我将创建一个保留周期虚弱的。

这是必要的吗? 或者如果出口(collectionView)被声明为弱,这不是必要的吗?

您的示例用于创建对 self 的弱引用以在闭包中使用。

至于@IanMacDonald 关于您的示例不需要它的评论,他也是正确的。 所以你只需要在 self 在闭包中为零时才需要这样做。

使用[weak self]一个很好的例子是异步网络请求,在视图控制器中,该请求用于填充视图。 如果用户退出,我们不再需要填充视图,也不需要对视图控制器的引用。

我真的很喜欢这篇关于闭包中引用计数的中等文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM