{"id":1672,"date":"2015-05-24T17:10:29","date_gmt":"2015-05-24T11:40:29","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=1672"},"modified":"2015-06-03T14:54:58","modified_gmt":"2015-06-03T09:24:58","slug":"lazy-loading-and-memory-management-of-images-in-uitableview-in-ios","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/","title":{"rendered":"Lazy Loading and Memory Management of Images in UITableView in iOS"},"content":{"rendered":"<h1><span style=\"color: #0000ff;\">Introduction to Lazy Loading<\/span><\/h1>\n<p><strong>What is lazy loading?<\/strong><\/p>\n<p>A little introduction of lazy loading is \u00a0<em>it is a design pattern to defer the initialization of an object until the point at which it is needed.<\/em>\u00a0In simple words create objects when it is needed.<\/p>\n<h1><span style=\"color: #0000ff;\">Problems to Tackle<\/span><\/h1>\n<p>Before talking about lazy loading of images, I want to mention about problems \/ issues associated in handling images in UITableView in iOS. These are:<\/p>\n<ol>\n<li><strong>Scrolling is blocked \/ interrupted<\/strong>\u00a0\u2013 Downloading images from server OR loading from device local storage is heavy task and it may take some time. If you load \u00a0images directly in cellForRowAtIndexPath() method of UITableView\u00a0then it blocks the UI thread and your UITableView\u00a0scroll will be interrupted and not smooth. You \u00a0need a mechanism to load images in a worker (separate) thread and show a place holder image until the image in not downloaded and placed in memory for fast access. Remember accessing images from Hard disk may also takes some time.<\/li>\n<li><strong>App Heap Memory can overshoot<\/strong>\u00a0\u2013 If we load many images in memory for faster access by UITableView, then memory (heap memory) allocated to the application might overshoot and app will crash with Out of Memory (OOM) error.<\/li>\n<li><strong>Work with Recycling of Views can be tricky<\/strong>\u00a0&#8211; When image is \u00a0downloaded \u00a0we need to \u00a0decide when to set a particular image in its ImageView of that row it is meant for. \u00a0It may be possible that the ImageView object will recycle and it \u00a0is given to another image and\u00a0we end up showing wrong image.<\/li>\n<\/ol>\n<h1><span style=\"color: #0000ff;\">Solution<\/span><\/h1>\n<h3>Memory Locations \u2013 Space Vs Accessibility:<\/h3>\n<p>There are 3 locations where images are stored. Their comparison on\u00a0Memory space availability\u00a0and\u00a0Accessibility speed\u00a0is given below:<\/p>\n<ol>\n<li>Server (Memory Space is HIGH but Accessibility is SLOW)<\/li>\n<li>Hard Disk on Mobile (Memory\u00a0Space is MEDIUM and Accessibility is MEDIUM)<\/li>\n<li>Heap Memory (Memory\u00a0Space is LOW and Accessibility is FAST)<\/li>\n<\/ol>\n<p>We need to create a balance among above 3 locations for optimum utilization of accessibility and memory space.<\/p>\n<h3>Mappings:<\/h3>\n<p>2 Mappings are required to manage the show. I have given them names. These are<\/p>\n<ol>\n<li><strong>Bitmap Cache Map<\/strong>\u00a0 (Unique ImageURL of Row\u00a0<strong>TO<\/strong>\u00a0Bitmap of Image)\u00a0<strong>\u00a0&#8211;\u00a0<\/strong>NSCache\u00a0class provided in iOS SDK to store images in memory (Heap) will be used here. NSCache\u00a0will act as cache and will also recycle the images after a certain limit is reached.<\/li>\n<li><strong>Image Download Tracker<\/strong>\u00a0(Image URL\u00a0<strong>TO<\/strong>\u00a0Object of NSOperation) \u2013 This will map the URL and the status of image that is being downloaded from the URL. It is possible that request to download the same image comes and that image is already in process of downloading. This tracker will help to ignore such requests.<\/li>\n<\/ol>\n<h3>Sequence of Steps:<\/h3>\n<p>1. When user comes to UITableView the\u00a0<strong>cellForRowAtIndexPath<\/strong>\u00a0is fired for a single cell. Here we will first check that if image is available in the object of NSCache class against the key which will be the image URL. If it is there then we will get the value of UIImage and set on cell&#8217;s imageView.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-1680\" alt=\"Screen Shot 2015-05-08 at 4.51.40 pm\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2.png\" width=\"1380\" height=\"866\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2.png 1380w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2-300x188.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2-1024x642.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/05\/Screen-Shot-2015-05-08-at-4.51.40-pm2-624x391.png 624w\" sizes=\"(max-width: 1380px) 100vw, 1380px\" \/><\/a><\/p>\n<p>2. If image is not available in\u00a0object of NSCache class then in that case we will make a object of NSOperation Class and add in Queue whose task is to fetch image either from the\u00a0Hard Disk or from the server.<\/p>\n<p>3. When this operation will start we will first check that if image is available in local storage. If image id not present here we first download the image and then return back to the ViewController via delegate method taking object of UIImage.<\/p>\n<p>4. If the image is available on device local storage Or it is available after downloading from server, it is put in Bitmap Cache \u00a0Map and send for display.<\/p>\n<p><em><strong>CHECKPOINT 2 of 3\u00a0<\/strong>&#8211; It is possible that by the time image is to be loaded from device local storage (Either already available OR after download), UITableView has been scrolled by the user and ImageView object is recycled and allocated to other row with a different ID. Mapping of ImageView and ID is checked in ImageView Recycler Map for that. If ImageView has been recycled, we don\u2019t need to place this image in Bitmap Cache Map. But keep it on hard disk.<\/em><\/p>\n<p>6. To display the image on ImageView we post a Runnable on the UI Thread using the Handler.<\/p>\n<p><em><strong>CHECKPOINT 3 of 3<\/strong>\u00a0\u2013 Just before image is set on ImageView we again check in ImageView Recycler Map if the Mapping of ImageView (IV1) and Id (ID1) exists. If the mapping exists we set the image on ImageView else the place \u00a0holder (default) image is set.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction to Lazy Loading What is lazy loading? A little introduction of lazy loading is \u00a0it is a design pattern to defer the initialization of an object until the point at which it is needed.\u00a0In simple words create objects when it is needed. Problems to Tackle Before talking about lazy loading of images, I want [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,71,8],"tags":[156,14,160,89,165,155],"class_list":["post-1672","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios","category-mobile","category-mobile-architecture-and-design","tag-image-handling-in-ios","tag-innovationm","tag-ios","tag-iphone","tag-mobile","tag-uitableview"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"Introduction to Lazy Loading What is lazy loading? A little introduction of lazy loading is \u00a0it is a design pattern to defer the initialization of an object until the point at which it is needed.\u00a0In simple words create objects when it is needed. Problems to Tackle Before talking about lazy loading of images, I want [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-24T11:40:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-06-03T09:24:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"624\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Lazy Loading and Memory Management of Images in UITableView in iOS\",\"datePublished\":\"2015-05-24T11:40:29+00:00\",\"dateModified\":\"2015-06-03T09:24:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/\"},\"wordCount\":767,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg\",\"keywords\":[\"Image Handling in iOS\",\"InnovationM\",\"iOS\",\"iPhone\",\"Mobile\",\"UITableView\"],\"articleSection\":[\"iOS\",\"Mobile\",\"Mobile Architecture and Design\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/\",\"name\":\"Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg\",\"datePublished\":\"2015-05-24T11:40:29+00:00\",\"dateModified\":\"2015-06-03T09:24:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg\",\"width\":624,\"height\":250,\"caption\":\"InnovationM Lazy Loading and Memory Management of Images in UITableView in iOS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lazy Loading and Memory Management of Images in UITableView in iOS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/","og_locale":"en_US","og_type":"article","og_title":"Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog","og_description":"Introduction to Lazy Loading What is lazy loading? A little introduction of lazy loading is \u00a0it is a design pattern to defer the initialization of an object until the point at which it is needed.\u00a0In simple words create objects when it is needed. Problems to Tackle Before talking about lazy loading of images, I want [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/","og_site_name":"InnovationM - Blog","article_published_time":"2015-05-24T11:40:29+00:00","article_modified_time":"2015-06-03T09:24:58+00:00","og_image":[{"width":624,"height":250,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg","type":"image\/jpeg"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Lazy Loading and Memory Management of Images in UITableView in iOS","datePublished":"2015-05-24T11:40:29+00:00","dateModified":"2015-06-03T09:24:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/"},"wordCount":767,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg","keywords":["Image Handling in iOS","InnovationM","iOS","iPhone","Mobile","UITableView"],"articleSection":["iOS","Mobile","Mobile Architecture and Design"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/","url":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/","name":"Lazy Loading and Memory Management of Images in UITableView in iOS - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg","datePublished":"2015-05-24T11:40:29+00:00","dateModified":"2015-06-03T09:24:58+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2015\/06\/InnovationM-Lazy-Loading-and-Memory-Management-of-Images-in-UITableView-in-iOS.jpg","width":624,"height":250,"caption":"InnovationM Lazy Loading and Memory Management of Images in UITableView in iOS"},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/lazy-loading-and-memory-management-of-images-in-uitableview-in-ios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Lazy Loading and Memory Management of Images in UITableView in iOS"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/1672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=1672"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/1672\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/1871"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=1672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=1672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=1672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}