【问题标题】:Creating a webpage and asyncronously loading app data off of it创建网页并异步加载应用数据
【发布时间】:2016-10-23 06:47:39
【问题描述】:

我正在使用 Xcode 和 Swift。

我的问题

是否可以创建自己的网页(最好是免费的,如 wordpress)来加载图像/内容?我该怎么做?这会解决我的应用程序当前的内存 (RAM) 问题吗?

我的问题(更详细)

我创建了一个应用程序,它可以加载数百张图片供用户查看。每张图片都是包含有关图像的重要信息的类的对象。因此,我在“assets”文件夹中拥有所有图像,并使用“named”而不是“contentsOfFile”将它们与适当的类对象相关联。但是,由于加载了太多图像,因此在滚动了数百张图像后,应用程序由于内存已满而崩溃。显然(根据我的阅读)图像已被缓存,并且它们不被缓存或清除缓存的唯一方法是通过 URL 加载它们。

我的希望

理想情况下,我希望能够更新网页,以便自动更新我的应用程序中的内容(添加/更改图像及其相关数据)。每个对象都包含图像和图像数据,对我来说重要的是这些数据与图像保持连接。至少我希望能够直接使用我的应用程序代码从网页中提取图像以防止崩溃。

如果可以在不重写我用来创建每个单独对象的数百行代码的情况下做到这一点,那将是理想的。我是否可以将创建每个类对象的代码放在网页上,让我的应用程序从页面中读取它并创建对象?这能解决我的问题吗?

如果有人可以向我提供有关如何执行此类操作的详细指南或将我引导至已有的指南,我将非常感激,因为我目前找不到。

编辑:请求了一些代码,但我无法在 cmets 中正确格式化。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {


        // get a reference to our storyboard cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell

        // Use the outlet in our custom class to get a reference to the UILabel in the cell
        cell.imageView.image = cardsToDisplay[indexPath.item].image
        cell.layoutIfNeeded()
        return cell
    }

【问题讨论】:

  • 就您的内存问题而言。我会考虑使用 weak 引用声明您的图像对象。
  • @Danoram 我相信如果你不另说,他们默认是弱的,但如果我错了,请纠正我
  • @Danoram 只是尝试将它们全部更改为弱,这反而使应用程序在到达适当的屏幕时崩溃
  • 有趣。我们必须更深入!与此同时,是的,我们不要做弱变量大声笑
  • @Danoram 在这一点上,我希望得到任何可以解决我列出的任何问题的东西。虽然我不知道如何让更多人看到这个问题

标签: ios swift asynchronous memory-management swift3


【解决方案1】:

使用contentsOfFile - 图片不会被缓存。

至于从网络加载它们 - 它不会解决您的问题,因为它会导致糟糕(甚至最差)的用户体验。图像将缓慢加载(与从磁盘加载它们相比)。您可以通过将它们缓存为本地文件来解决此问题,但是您应该再次使用contentsOfFile 以免将它们缓存在内存中。所以从网上加载图片是没有用的。

【讨论】:

  • 我之前尝试过使用 contentsOfFile,可能应该提到这一点。它仍然有同样的问题,当我滚动浏览图片时,我会看到内存填满,它会崩溃。如果我缺少图像,它还增加了不运行的好处,使用起来并不有趣。
  • @TrevorJordy 你是在UITableView 或UICollectionView 中展示图片吗?
  • 我正在使用 UICollectionView
  • @TrevorJordy 你在重复使用这些单元格吗?
  • 我明天起床后会发布一些代码,抱歉让您久等了,感谢您的宝贵时间。我会及时通知你
【解决方案2】:

您想要的是类似于 google firebase 数据库的东西,然后每次用户在 wifi 区域中打开应用程序时,您都可以从中下载所有最新数据。使用 Firebase 存储似乎也可以降低 RAM。查看 firebase 和类似服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多