<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>IOS on Lantean</title><link>https://www.lantean.co/tags/ios/</link><description>Recent content in IOS on Lantean</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 09 Mar 2012 16:35:06 +0000</lastBuildDate><atom:link href="https://www.lantean.co/tags/ios/index.xml" rel="self" type="application/rss+xml"/><item><title>Preventing crashes: JSON Parsers &amp;amp; Null entries!</title><link>https://www.lantean.co/posts/preventing-crashes-json-parsers-null-entries/</link><pubDate>Fri, 09 Mar 2012 16:35:06 +0000</pubDate><guid>https://www.lantean.co/posts/preventing-crashes-json-parsers-null-entries/</guid><description>&lt;p&gt;How many times you got to parse a backend response, and tested if a given value is != nil?. Well, as it turns out, many parsers (such as JSONKit) will parse &amp;rsquo;null&amp;rsquo; values into an instance of NSNull. That might cause a crash&amp;hellip; unless you write eeeverywhere&amp;hellip; &amp;lsquo;!= nil &amp;amp;&amp;amp; != [NSNull null]&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;So&amp;hellip; a good idea would be to implement an NSDictionary extention, to do that. Right?.
The method would look like this:&lt;/p&gt;</description></item><item><title>Filtering arrays with NSPredicate!</title><link>https://www.lantean.co/posts/filtering-arrays-with-nspredicate/</link><pubDate>Fri, 09 Mar 2012 12:24:42 +0000</pubDate><guid>https://www.lantean.co/posts/filtering-arrays-with-nspredicate/</guid><description>&lt;p&gt;Suppose you wanna filter a collection of objects. Normally, you&amp;rsquo;d write a while loop, implement a comparison, and add the matching objects to a collection.&lt;/p&gt;
&lt;p&gt;Well, there is an easier way!!. For the sake of this example, say you wanna filter the objects that have the BOOL &amp;lsquo;isEnabled set to YES. So, you could do the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NSPredicate&lt;span style="color:#f92672"&gt;*&lt;/span&gt; predicate &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [NSPredicate predicateWithFormat:&lt;span style="color:#e6db74"&gt;@&amp;#34;isEnabled == YES&amp;#34;&lt;/span&gt;]; NSArray &lt;span style="color:#f92672"&gt;*&lt;/span&gt;filteredArray &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [myArray filteredArrayUsingPredicate:predicate];&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yet another powerful example of NSPredicate would be&amp;hellip; remember &amp;lsquo;SELECT* WHERE FIELD IN(1, 2)&amp;rsquo; ?. Guess what!&lt;/p&gt;</description></item><item><title>Memory Management Tips!</title><link>https://www.lantean.co/posts/memory-management-tips/</link><pubDate>Thu, 08 Mar 2012 23:26:27 +0000</pubDate><guid>https://www.lantean.co/posts/memory-management-tips/</guid><description>&lt;p&gt;It&amp;rsquo;s REALLY recommended that you set to nil any pointer that has a reference to a released object. But it&amp;rsquo;s tedious, right?. [pointer release]; pointer = nil;.&lt;/p&gt;
&lt;p&gt;Why don&amp;rsquo;t we use a macro instead??&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#define LAWipe(x)         [x release]; x = nil;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Simple. Nice. This should help you lower down the BAD_ACCESS crashes!.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>iOS Singletons</title><link>https://www.lantean.co/posts/ios-singletons/</link><pubDate>Thu, 08 Mar 2012 23:08:53 +0000</pubDate><guid>https://www.lantean.co/posts/ios-singletons/</guid><description>&lt;p&gt;&lt;a href="https://www.lantean.co/wp-content/uploads/2012/03/ios3.jpeg"&gt;&lt;img class="aligncenter size-full wp-image-1066" alt="ios3" src="https://www.lantean.co/wp-content/uploads/2012/03/ios3.jpeg" width="400" height="311" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Suppose that&amp;hellip; for whatever reason, you need to target iOS 3.x. Yes. You need to build an app that should run on any possible device. Or say that&amp;hellip; you simply don&amp;rsquo;t wanna use GCD.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s the alternative to write a singleton?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+ (&lt;span style="color:#66d9ef"&gt;id&lt;/span&gt;)&lt;span style="color:#a6e22e"&gt;sharedInstance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;(_instance &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nil)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;@synchronized&lt;/span&gt;(self)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;(_instance &lt;span style="color:#f92672"&gt;==&lt;/span&gt; nil)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _instance &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [[[self &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;] alloc] init];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; _instance;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a nice alternative to the GCD option. The first time the instance is created, you&amp;rsquo;ll suffer the lag caused by the @synchronized block. But after that. it&amp;rsquo;s just an if. No context switch. No whatsoever! REALLY performant!&lt;/p&gt;</description></item><item><title>iOS Assertions</title><link>https://www.lantean.co/posts/ios-assertions/</link><pubDate>Thu, 08 Mar 2012 23:03:28 +0000</pubDate><guid>https://www.lantean.co/posts/ios-assertions/</guid><description>&lt;p&gt;So&amp;hellip; you write a new piece of code. You run it. Test it. Ship it!. And in two weeks, you end up flooded by iTunes Connect Crash Reports.&lt;/p&gt;
&lt;p&gt;What happened?. It turned out that an attribute parsed from a backend response ended up being a NSString instead of an NSNumber. And it was only after an untested-and-specific-workflow that your application actually used that field.&lt;/p&gt;
&lt;p&gt;How do we prevent this?. ASSERTIONS!. A good friend of mine teached me that&amp;hellip; great software blows everywhere before getting published. If your code works perfectly&amp;hellip; you should be scared!.&lt;/p&gt;</description></item><item><title>Grand Central Dispatch Singletons</title><link>https://www.lantean.co/posts/grand-central-dispatch-singletons/</link><pubDate>Thu, 08 Mar 2012 22:46:41 +0000</pubDate><guid>https://www.lantean.co/posts/grand-central-dispatch-singletons/</guid><description>&lt;p&gt;So&amp;hellip; what&amp;rsquo;s the recommended way (thread safety + performance) to implement a singleton?&lt;/p&gt;
&lt;p&gt;Well.. it looks pretty much like this!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-objc" data-lang="objc"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+ (&lt;span style="color:#66d9ef"&gt;instancetype&lt;/span&gt;)&lt;span style="color:#a6e22e"&gt;sharedInstance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; dispatch_once_t pred;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; Foo&lt;span style="color:#f92672"&gt;*&lt;/span&gt; bar &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nil;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dispatch_once(&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;pred, &lt;span style="color:#f92672"&gt;^&lt;/span&gt;{ bar &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [[Foo alloc] init]; });
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; bar;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>