在Firebase Cloud Messaging上订阅数百个主题时,iOS应用程序崩溃

时间:2016-07-19 21:14:13

标签: ios firebase google-cloud-messaging firebase-cloud-messaging

我使用FCM处理iOS应用中的通知。一切正常,但是当我必须同时处理大约300到400个主题订阅时,我遇到了问题。 当我启动我的应用程序时,此函数被调用大约400次:

FIRMessaging.messaging().subscribeToTopic("/topics/\(nameoftopic)")

但是在调用大约300次之后,应用程序崩溃,没有来自调试器的消息。 我认为崩溃与内存泄漏有关,但我不确定。

任何人都可以帮助我吗?谢谢!

更新

在模拟器上运行应用程序后使用Instruments的分配工具后,我发现了一些有趣的东西。

注意:如果我在模拟器中使用该应用程序,它不会崩溃。

在调用“subscribe 400 topics”功能之前,我的应用程序的情况如下:

enter image description here

以下是调用“subscribe 400 topics”功能后app的情况:

enter image description here

正如你所看到的,有很多内存使用,例如图像中的Malloc 3,00 kib记录,保留约424 MiB!

有没有办法解决这个问题?谢谢!

更新

通过javascript调用我的应用程序内的WKWebView来触发对主题的订阅。 特别是:

  1. 用户将其凭据插入WkWebView
  2. 登录后,进入WkWebView的网站启动了一个javascript函数,该函数调用了一个订阅主题的原生iOS函数
  3. 网站启动javascript功能约400次(每个主题一次调用订阅)。
  4. 我试图评论由javascript函数调用的本机iOS函数(订阅该主题),但应用程序一直在崩溃。

    所以,我认为这个问题涉及到javascript桥接(谁从webview调用的javascript函数调用本机函数)被调用400次,而不是直接订阅多个主题。

    修改

    以下是崩溃日志:

    Incident Identifier: 431E0DD6-8AEC-4614-B417-3320FB08C2B4
    CrashReporter Key:   d651543acfe23fc7feac21ffef17bfcbc8d222b3
    Hardware Model:      iPad2,2
    OS Version:          iPhone OS 8.1.3 (12B466)
    Kernel Version:      Darwin Kernel Version 14.0.0: Mon Jan 12 21:30:11 PST 2015; root:xnu-2783.3.26~3/RELEASE_ARM_S5L8940X
    Date:                2016-07-21 10:18:37 +0200
    Time since snapshot: 68 ms
    
    Free pages:                              1092
    Active pages:                            3736
    Inactive pages:                          1929
    Speculative pages:                       147
    Throttled pages:                         100888
    Purgeable pages:                         0
    Wired pages:                             20866
    File-backed pages:                       5413
    Anonymous pages:                         399
    Compressions:                            12087
    Decompressions:                          4011
    Compressor Size:                         63
    Uncompressed Pages in Compressor:        0
    Page Size:                               4096
    Largest process:   TestApp
    
    Processes
         Name       |            <UUID>                |     CPU Time|     rpages|       purgeable| recent_max| lifetime_max| fds |  [reason]         | (state)
    
                swcd <e22b9809b0b83a3d822cdd499e630b44>         0.089         153                0           -           529   50   [vm-pageshortage]   (daemon)
       nsurlsessiond <d04dc25e93283de3b7ee8db12bd33953>         0.794         336                0           -          1543   50   [vm-pageshortage]   (daemon)
         debugserver <ef1b24f73ea43149b0666ea20e5f7dda>         1.770         154                0          +8           679   50   [vm-pageshortage]   (daemon)
                 kbd <008376fef2c13eab9d7b6cd71eacf1d7>         3.369         553                0           -          2063   50   [vm-pageshortage]   (daemon)
                tccd <1c3b7672d405345a9599a9165b4e9672>         3.334         197                0           -           854   50                       (daemon)
                 lsd <18a22fa1c3ba3aa0871ad1843aa4c847>         2.169         269                0           -          1225   50                       (daemon)
    com.apple.WebKit <509457e569a934bc8289a7a1b8943347>         3.089        2453                0         +55          3493   50                       (frontmost)
    com.apple.WebKit <509457e569a934bc8289a7a1b8943347>         7.421       18667                0           -         17412   50                       (frontmost)
             TestApp <de60e10c4dca3921ad7cc901b68dc71f>        11.944       53345                0           -         53845   50                       (frontmost) (resume)
                ptpd <899195f7d556391998a2cacb7371751c>         1.522         801                0           -          1715   50                       (daemon)
            BTServer <24daf6f44d893f6daf5a680c92b63fc7>         2.992         350                0           -          1482   50                       (daemon)
           lockdownd <2da4a7e0dd1a35b9ae05f52e8d5aad3a>        16.308         215                0           -          1019   50                       (daemon)
          discoveryd <7b61a3893f0f3f2ca2227304d7fc0a05>        55.199         661                0           -          1942  400                       (daemon)
               wifid <b9f927d2166a35ddbcddfc792aa06a88>        46.416         422                0           -          1352   50                       (daemon)
           locationd <0017f8e9b9803dc7b82ab6c21acb6487>       563.557        1491                0           -          4018   50                       (daemon)
             imagent <2db1206e12ef30fe833d30a6857badf9>        10.430         486                0           -          1964   50                       (daemon)
    identityservices <235ad60b31753ba39ca43729cbac31fd>        14.170         473                0           -          2232   50                       (daemon)
             syslogd <21614327a5913635bf8bc2272aab94ae>        47.307         197                0           -          1426   50                       (daemon)
       iaptransportd <8ee55cf028c0311b939e0113712a1344>         7.143         301                0           -           803   50                       (daemon)
        mediaserverd <951ab0492a0c3a119805c38697cf67e7>       101.623         921                0           -          2603   50                       (daemon)
            cfprefsd <77e3ddae064b3007a4f5d13522c29767>        57.303         313                0           -           707   50                       (daemon)
              powerd <496f3f6fd0173e5d8ca1dfceadc76dd1>        24.261         217                0           -           460   50                       (daemon)
            networkd <385c01062c27379d883f244a17aaf235>        86.147         672                0           -          1723   50                       (daemon)
                apsd <8da1c66348543d4ebd72e810fc2f36e0>        38.871         576                0           -          1737  100                       (daemon)
         dataaccessd <a7a7f65633c03d5985c23a80b0db4c97>        10.382         596                0           -          2042   50                       (daemon)
                iapd <03badd6a166c3daf934c29ce1d86e128>         9.314         435                0           -          1542   50                       (daemon)
    CommCenterMobile <0fd2ae4f78ae3df3830cdd46aa29b06c>         0.732         336                0           -          1304   50                       (daemon)
             searchd <9d6bf30189a23d6d959aaf2c08c19607>         1.100         724                0           -          2523   50                       (daemon)
        mediaremoted <5a7484513dca313997af39582eb8cc8f>         0.720         216                0           -          1050   50                       (daemon)
       syncdefaultsd <b377e47d27323a97b4a00d85e6af8530>         0.245         297                0           -          1068   50                       (daemon)
           securityd <9f54dbee58003edc82e0648fad2f75f8>         3.328         575                0           -          1412   50                       (daemon)
         SpringBoard <a09599dad0b73d488762bbf4df172b0a>       649.777        5161                0           -         13265   50                      
          backboardd <119c485cefcd3127a318d4fc1636dbeb>      2110.390        7113                0           -          4717   50                       (daemon)
      UserEventAgent <736bfc71654a3e1284af9976c16a00a5>       200.859         740                0           -          2351  100                       (daemon)
             configd <8df7332b99003995862643fdbb1c8b00>        31.570         397                0           -          1203   50                       (daemon)
           fseventsd <a366dd315e273afc96084abc8f6f1c3e>        14.679         318                0           -           837   50                       (daemon)
        fairplayd.A1 <f3eaf6eefeea37378292c8cf9eaab5ac>        20.154         144                0           -          1469   50                       (daemon)
          assertiond <b5cb3ee93d6a32b1a08fbf075ae23191>        18.089         267                0           -           936   50                       (daemon)
           distnoted <42234e3ec6563c7dac4d510e301f6946>         3.826         157                0           -           263   50                       (daemon)
    discoveryd_helpe <09b3407bfeff330299a6a84dd8673ac3>         0.419         125                0           -           567   50                       (daemon)
    filecoordination <4450909aaf823fd1a96a4c94813c9da0>         2.506         212                0           -           784   50                       (daemon)
          aggregated <6747e33da38f39688022fe05295a7fad>       814.695         999                0           -          1990   50                       (daemon)
          DTMobileIS <96811bdfb87837499227af222f3d8471>        10.993         463                0           -          1921   50                       (daemon)
                 ubd <44b27d08a6823a859e0ec08131f20be9>         0.194         181                0           -           714   50                       (daemon)
           accountsd <d18f8d0e475d3dcbac17a98abcdf70e9>         1.345         379                0           -          1005   50                       (daemon)
    CommCenterClassi <7cdb180802b53bc9bce7cafb749d09ca>       110.886         585                0           -          2352   50                       (daemon)
             notifyd <1166f790e0e73573afb6b0ff4708366c>        44.864         240                0           -           293   50                       (daemon)
            xpcproxy <4b3cd1e859d031e4b855c1c48aa1344f>         0.004          16                0           -            52   50                       (daemon)
    
    **End**
    

2 个答案:

答案 0 :(得分:0)

您是否每次都订阅?如果是,那么这不应该发生。订阅应该仅在用户第一次启动应用程序时发生,并且仅在用户订阅主题时才会发生(即使那时只应该执行该特定操作)。

如果您的操作需要时间,请将其委托给后台线程。

答案 1 :(得分:0)

您是否将一个类中的强引用变量分配给另一个没有前缀为“weak”或“unowned”的类中的另一个变量?这样做会产生一个强大的参考周期,这将耗尽ARC的工作记忆。

如果您担心内存泄漏,请使用分配工具,通过选择“仪器”在Xcode的顶层菜单中访问。或者,您可以使用Cmd + I访问仪器。