0

I am looking to improve my memory usage on my app and noticed that using AdMob is adversely affecting my application.

Specifically, with this code:

override func viewDidLoad() {
            
            super.viewDidLoad()
             
 
            multipleAdsOptions.numberOfAds = 5
            let imageAdOptions = GADNativeAdImageAdLoaderOptions()
  
            adLoader = GADAdLoader(adUnitID: "ca-app-pub-xxxxxxxx", rootViewController: self, adTypes: [GADAdLoaderAdType.native], options: [multipleAdsOptions, imageAdOptions])
            adLoader.delegate = self
             
            GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ kGADSimulatorID.description() ]

            DispatchQueue.main.async {
              self.adLoader.load(GADRequest())
            }

.. .. }

I noticed that each time I trigger a viewDidLoad in my application for this code, it increases the memory used by about 10-15mb. If I quickly tap in and out of this screen (which is actually a common action) I can get the MB usage up as high as I want until I stop. I noticed that this line of code is of course the culprit:

self.adLoader.load(GADRequest())

If I comment that out, my app stays at a clean 50mb and even appears to run much better overall. Am I using AdMob wrong here? should I be loading the ads once and never calling load again in my viewdidload? This is a highly trafficked screen and my test users are reporting app sluggishness until they restart.

This is my main screen (root view controller) and it contains a feed of products and I also have an AdvertisementFeedCell where I load an ad every 5 items in this feed if that makes sense.

class AdvertisementFeedCell: UITableViewCell {
 
    @IBOutlet var adMedia: GADNativeAdView!
    @IBOutlet var adHeadline: UILabel!
    @IBOutlet var unifiedNativeAdView: GADNativeAdView!
     
    override func awakeFromNib() {
        super.awakeFromNib()
    }
   } 

When I populate my table, I insert a new item every 5 spots for an Ad:

let count = self.feedItems.count / 5
                                //Insert an ad every 5 
                                if (count > 0)
                                {
                                    for i in 1...count
                                    {
                                        let adFeedItem = FeedItem()
                                        adFeedItem.isAdvertisement = true
                                        self.feedItems.insert(adFeedItem, at: i * 5)
                                    }
                                }
                                
                                self.reloadTable() 

And when my tableview populates with data, I check if the item is of typeadvertisement

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            
            let feedItem = feedItems[indexPath.row]
        
            if (feedItem.isAdvertisement)
            {
                let cell:AdvertisementFeedCell =  tableView.dequeueReusableCell(withIdentifier: "adCell")! as! AdvertisementFeedCell
 
                if (ads.count > 0 && indexPath.row > 1)
                {
                    let nativeAd = ads[(indexPath.row / 5) - 1]
                    cell.unifiedNativeAdView.nativeAd = nativeAd
                    cell.adHeadline.text = nativeAd.headline!
    
                    //If there is an icon, use that
                    if (nativeAd.icon != nil)
                    {
                        (cell.unifiedNativeAdView.iconView as? UIImageView)?.image = nativeAd.icon?.image
                        cell.unifiedNativeAdView.mediaView?.isHidden = true
                        cell.unifiedNativeAdView.iconView?.isHidden = false
                    }
                    else {
                        //Otherwise, Add Media and hide icon
                        cell.unifiedNativeAdView.mediaView?.contentMode = UIViewContentMode.scaleToFill
                        cell.unifiedNativeAdView.mediaView?.mediaContent = nativeAd.mediaContent
                        cell.unifiedNativeAdView.mediaView?.isHidden = false
                        cell.unifiedNativeAdView.iconView?.isHidden = true
                    }
                    cell.frame = CGRect(x: 0, y: 0, width: 375, height: 108 )
 
                    //Add body text if available
                    (cell.unifiedNativeAdView.bodyView as? UILabel)?.text = nativeAd.body
                    cell.unifiedNativeAdView.bodyView?.isHidden = nativeAd.body == nil        
                    cell.clipsToBounds = true
                    cell.unifiedNativeAdView.clipsToBounds = true
                }
               
          
                return cell
            }

Thank you!

NullHypothesis
  • 4,286
  • 6
  • 37
  • 79

0 Answers0