{"id":2014,"date":"2013-06-17T12:08:33","date_gmt":"2013-06-17T15:08:33","guid":{"rendered":"http:\/\/blogimpacta.com.br\/?p=2014"},"modified":"2013-06-17T12:08:33","modified_gmt":"2013-06-17T15:08:33","slug":"arc-automatic-reference-count","status":"publish","type":"post","link":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/","title":{"rendered":"ARC-Automatic Reference Count"},"content":{"rendered":"<p><span style=\"font-size: 14pt;\">Dessa vez falaremos de um tema muito importante recentemente, no mundo mobile, que \u00e9 o <strong>ARC\u00a0 \u201cAutomatic Reference Count<\/strong> \u201c. Descobriremos qual a relev\u00e2ncia disso em um app para iphone e como o ARC funciona e ajuda a vida do desenvolvedor.<\/span><br \/>\n<span style=\"font-size: 14pt;\">Antes de falar de ARC, \u00e9 necess\u00e1rio entender um sistema chamado MRC \u201cManual Reference Count\u201d.<\/span><br \/>\n<span style=\"font-size: 14pt;\">No iOS, toda vez que vamos utilizar um objeto, temos que informar ao sistema que usaremos um determinado espa\u00e7o de mem\u00f3ria e que ele precisa ser reservado. Funciona mais ou menos como reservar um quarto de hotel onde voc\u00ea liga para pra o hotel (no caso, o sistema), e avisa que vai ocupar um quarto por um per\u00edodo especifico de dias. <\/span><br \/>\n<span style=\"font-size: 14pt;\">Logo, o hotel reserva esse quarto e s\u00f3 o libera novamente depois que voc\u00ea avisar que n\u00e3o ir\u00e1 mais utiliz\u00e1-lo.<\/span><br \/>\n<span style=\"font-size: 14pt;\">Em termos mais t\u00e9cnicos, no sistema iOS utilizamos alguns m\u00e9todos para controlar manualmente a mem\u00f3ria, e assim, a vida de um objeto. Quando criamos um objeto no Xcode ele come\u00e7a a ter um Reference Count, que nada mais \u00e9 que um n\u00famero de contagem. <\/span><br \/>\n<span style=\"font-size: 14pt;\">Todo objeto precisa ter o count 1, no m\u00ednimo, para que o sistema mantenha a mem\u00f3ria reservada para ele. Dessa forma usamos alguns m\u00e9todos que nos possibilitam adicionar ou subtrair esse count do objeto que s\u00e3o: <strong><em>alloc, retain, release,copy, autorelease.<\/em><\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">Quando vamos criar o objeto usamos o <strong>alloc, <\/strong>nesse momento o sistema entende que estamos pedindo para reservar um espa\u00e7o de mem\u00f3ria e j\u00e1 adiciona 1 ao count do objeto. <\/span><br \/>\n<span style=\"font-size: 14pt;\">Se voc\u00ea quer que o sistema mantenha o objeto durante todo o programa voc\u00ea deve usar o <strong>retain<\/strong> para adicionar +1 no count dele, agora quando\u00a0 voc\u00ea ja usou o objeto precisa liberar a mem\u00f3ria utilizamos o <strong>release <\/strong>para subtrair -1 do count. <\/span><br \/>\n<span style=\"font-size: 14pt;\">Quando o count chega a ZERO o sistema entende que voc\u00ea n\u00e3o precisa mais daquele objeto, executa o <strong>dealloc <\/strong>e o elimina da mem\u00f3ria. Os m\u00e9todos <strong>copy<\/strong> e <strong>autorelease<\/strong> s\u00e3o abordados mais a fundo no curso de iOS Developer da Impacta.<\/span><br \/>\n<span style=\"font-size: 14pt;\">E \u00e9 assim a vida de um objeto criado por voc\u00ea no iOS. Porem, como temos muitas coisas para nos preocupar ao mesmo tempo; tantos ifs , elses e switchs, sempre esquecemos de gerenciar a mem\u00f3ria. Com isso t\u00ednhamos um alto \u00edndice de problemas com vazamento. <\/span><br \/>\n<span style=\"font-size: 14pt;\">E o iOS tem uma maneira muito positiva de\u00a0 tratar um app que deixa de funcionar por mais de 10 segundos: ele simplesmente o encerra. Voc\u00ea j\u00e1 deve ter vivenciado isso: est\u00e1 utilizando seu app, quando ele de repente encerra sozinho. <\/span><br \/>\n<span style=\"font-size: 14pt;\">Isso acontece porque como o controle de mem\u00f3ria era o MRC, ficava por nossa responsabilidade informar ao sistema para que ele liberasse a mem\u00f3ria que n\u00e3o \u00edamos mais utilizar e se n\u00e3o fiz\u00e9ssemos isso, o sistema continuava com a mem\u00f3ria retida e isso consequentemente causava problemas no desempenho do app.<\/span><br \/>\n<span style=\"font-size: 14pt;\">Mas, para nossa alegria, a Apple lan\u00e7ou no iOS 4.2 <strong>o ARC,<\/strong> uma incr\u00edvel novidade para n\u00f3s desenvolvedores. O ARC gerencia automaticamente o numero de count de cada objeto criado, e dessa forma, quando ele percebe que n\u00e3o vai mais utilizar um determinado objeto, libera a mem\u00f3ria retida nele. O \u00fanico trabalho que temos \u00e9 de avisar ao sistema, ao iniciar um novo projeto, que o ARC ser\u00e1 utilizado.<\/span><br \/>\n<span style=\"font-size: 14pt;\">Dessa forma, todo gerenciamento de mem\u00f3ria fica por conta do sistema.<\/span><br \/>\n<span style=\"font-size: 14pt;\">No <strong>ARC<\/strong> temos que trabalhar com dois tipos de refer\u00eancias: <strong>Strong<\/strong> e <strong>Weak<\/strong>, que o sistema precisa para entender qual a import\u00e2ncia que o objeto tem dentro do app de acordo com a refer\u00eancia\u00a0 que o programador definiu quando declarou o mesmo. Mas isso veremos mais a fundo no treinamento.<\/span><br \/>\n<span style=\"font-size: 14pt;\">Espero ter ajudado e que com esse artigo voc\u00ea tenha entendido melhor como funciona o gerenciamento autom\u00e1tico de mem\u00f3ria. N\u00e3o esque\u00e7a de deixar seu coment\u00e1rio nos contando se o conte\u00fado foi relevante para voc\u00ea ou caso tenha ficado alguma d\u00favida!<\/span><br \/>\n&nbsp;<\/p>\n<div class=\"sharing-default-minimal post-bottom\"><div class=\"nectar-social default\" data-position=\"\" data-rm-love=\"0\" data-color-override=\"override\"><div class=\"nectar-social-inner\"><a href=\"#\" class=\"nectar-love\" id=\"nectar-love-2014\" title=\"Love this\"> <i class=\"icon-salient-heart-2\"><\/i><span class=\"love-text\">Love<\/span><span class=\"total_loves\"><span class=\"nectar-love-count\">0<\/span><\/span><\/a><a class='facebook-share nectar-sharing' href='#' title='Share this'> <i class='fa fa-facebook'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='twitter-share nectar-sharing' href='#' title='Share this'> <i class='fa icon-salient-x-twitter'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='linkedin-share nectar-sharing' href='#' title='Share this'> <i class='fa fa-linkedin'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='pinterest-share nectar-sharing' href='#' title='Pin this'> <i class='fa fa-pinterest'><\/i> <span class='social-text'>Pin<\/span> <\/a><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Dessa vez falaremos de um tema muito importante recentemente, no mundo mobile, que \u00e9 o ARC\u00a0 \u201cAutomatic Reference Count \u201c. Descobriremos qual a relev\u00e2ncia disso em um app para iphone e como o ARC funciona e ajuda a vida do desenvolvedor. Antes de falar de ARC, \u00e9 necess\u00e1rio entender um sistema chamado MRC \u201cManual Reference [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":17810,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[59,98,99],"class_list":["post-2014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tecnologia","tag-apple","tag-ios","tag-objective-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>ARC-Automatic Reference Count<\/title>\r\n<meta name=\"description\" content=\"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/\" \/>\r\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"ARC-Automatic Reference Count\" \/>\r\n<meta property=\"og:description\" content=\"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Blog Impacta - Dicas e Not\u00edcias sobre Carreira\" \/>\r\n<meta property=\"article:published_time\" content=\"2013-06-17T15:08:33+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"473\" \/>\r\n\t<meta property=\"og:image:height\" content=\"157\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"Reda\u00e7\u00e3o Impacta\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Reda\u00e7\u00e3o Impacta\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/\",\"name\":\"ARC-Automatic Reference Count\",\"isPartOf\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg\",\"datePublished\":\"2013-06-17T15:08:33+00:00\",\"author\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/2e0896bac7656da15b68f5ad2ddd0d8c\"},\"description\":\"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg\",\"contentUrl\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg\",\"width\":473,\"height\":157},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.impacta.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ARC-Automatic Reference Count\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#website\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/\",\"name\":\"Blog Impacta - Dicas e Not\u00edcias sobre Carreira\",\"description\":\"Dicas, Not\u00edcias e Conte\u00fados sobre Carreira, Tecnologia, Design, Gest\u00e3o e Marketing. Conhe\u00e7a e Acompanhe o Blog Impacta\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.impacta.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/2e0896bac7656da15b68f5ad2ddd0d8c\",\"name\":\"Reda\u00e7\u00e3o Impacta\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7443a59e479c8f31067628e3a4bed9ad?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7443a59e479c8f31067628e3a4bed9ad?s=96&d=mm&r=g\",\"caption\":\"Reda\u00e7\u00e3o Impacta\"},\"url\":\"https:\/\/www.impacta.com.br\/blog\/author\/redacao\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ARC-Automatic Reference Count","description":"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.","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.impacta.com.br\/blog\/arc-automatic-reference-count\/","og_locale":"pt_BR","og_type":"article","og_title":"ARC-Automatic Reference Count","og_description":"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.","og_url":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/","og_site_name":"Blog Impacta - Dicas e Not\u00edcias sobre Carreira","article_published_time":"2013-06-17T15:08:33+00:00","og_image":[{"width":473,"height":157,"url":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg","type":"image\/jpeg"}],"author":"Reda\u00e7\u00e3o Impacta","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Reda\u00e7\u00e3o Impacta","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/","url":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/","name":"ARC-Automatic Reference Count","isPartOf":{"@id":"https:\/\/www.impacta.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage"},"image":{"@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage"},"thumbnailUrl":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg","datePublished":"2013-06-17T15:08:33+00:00","author":{"@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/2e0896bac7656da15b68f5ad2ddd0d8c"},"description":"O obejtivo do ARC \u00e9 gerenciar automaticamente o n\u00famero de count de determinado objeto criado e quando o mesmo n\u00e3o \u00e9 utilizado, ele libera a mem\u00f3ria retida.","breadcrumb":{"@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#primaryimage","url":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg","contentUrl":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/ioc_arc2.jpg","width":473,"height":157},{"@type":"BreadcrumbList","@id":"https:\/\/www.impacta.com.br\/blog\/arc-automatic-reference-count\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.impacta.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"ARC-Automatic Reference Count"}]},{"@type":"WebSite","@id":"https:\/\/www.impacta.com.br\/blog\/#website","url":"https:\/\/www.impacta.com.br\/blog\/","name":"Blog Impacta - Dicas e Not\u00edcias sobre Carreira","description":"Dicas, Not\u00edcias e Conte\u00fados sobre Carreira, Tecnologia, Design, Gest\u00e3o e Marketing. Conhe\u00e7a e Acompanhe o Blog Impacta","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.impacta.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/2e0896bac7656da15b68f5ad2ddd0d8c","name":"Reda\u00e7\u00e3o Impacta","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7443a59e479c8f31067628e3a4bed9ad?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7443a59e479c8f31067628e3a4bed9ad?s=96&d=mm&r=g","caption":"Reda\u00e7\u00e3o Impacta"},"url":"https:\/\/www.impacta.com.br\/blog\/author\/redacao\/"}]}},"acf":{"post_description":null,"capa_mobile":null},"_links":{"self":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts\/2014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2014"}],"version-history":[{"count":0,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts\/2014\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/media\/17810"}],"wp:attachment":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}