【问题标题】:Memory leak while reloading the collectionView : Firebase重新加载 collectionView 时内存泄漏:Firebase
【发布时间】:2017-02-28 08:30:19
【问题描述】:

我正在尝试用帖子填充 collectionView。我必须获取帖子,然后为发布它们的用户获取一些数据。由于某种原因,它不起作用。

DataService.ds.REF_POSTS.child("\(self.loggedInUser!.uid)").queryLimitedToLast(30).observeSingleEventOfType(.Value, withBlock: { postDictionary in
            if postDictionary.exists() {
                if let snapshots = postDictionary.children.allObjects as? [FIRDataSnapshot] {
                    self.posts = [Post]()
                    for snap in snapshots {
                        if let postDict = snap.value as? NSDictionary {
                            for(name, value) in postDict {
                                let interval = postDict.objectForKey("timePosted") as! Double
                                let formattedDate = NSDate(timeIntervalSince1970: interval)
                                let timeAgo = self.getDate(formattedDate)
                                if name as! String == "postedBy" {
                                    DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (userDictionary) in
                                        let userDict = userDictionary.value as! NSDictionary
                                        let username = userDict.objectForKey("username")!
                                        let profileThumbUrl = userDict.objectForKey("profileThumbUrl")!
                                        let key = snap.key
                                        let post = Post(postKey: key, dictionary: postDict, username: username as! String, profileThumbUrl: profileThumbUrl as! String, timeAgo: timeAgo)
                                        self.posts.append(post)
                                    })
                                }
                            }
                        }
                    }
                }
            }
            self.collectionView?.reloadData()
        })

如果我在附加帖子后立即执行 reload(),它会起作用,但会出现某种内存泄漏。如果我使用虚拟值,则 Post 类或填充集合视图没有问题。问题出在我发布的这段代码中。我想我有一个额外的循环,或者有人可以帮忙吗?

【问题讨论】:

  • 你是什么意思内存泄漏
  • ram 使用率不断上升,我认为重新加载如此之多,因为它是当我把重新加载放在这么多循环中的时候

标签: ios swift firebase uicollectionview firebase-realtime-database


【解决方案1】:

如果你担心 reload() 是内存泄漏的原因,你可以使用这个 hack:-

 if name as! String == "postedBy" {
                                DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (userDictionary) in
                                    let userDict = userDictionary.value as! NSDictionary
                                    let username = userDict.objectForKey("username")!
                                    let profileThumbUrl = userDict.objectForKey("profileThumbUrl")!
                                    let key = snap.key
                                    let post = Post(postKey: key, dictionary: postDict, username: username as! String, profileThumbUrl: profileThumbUrl as! String, timeAgo: timeAgo)
                                    self.posts.append(post)

                                if posts.count == postDictionary.childrenCount{

                                 self.collectionView?.reloadData()

                                    } 
                                })
                            }

然后也看到这个答案:- Firebase observeSingleEventOfType stays in memory

【讨论】:

  • 是的,它运行 reloadData 很多次,并且由于某种原因导致它使用 3 倍的内存(如果使用 30 个帖子),如果我让它像 120 个帖子一样加载它只会一直上升直到它崩溃了。这是完美的。我整天都在想办法解决这个问题,我只是在尝试做你在那里所做的事情,但不知道如何获得 postDictionary 计数,哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2012-01-12
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多