<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Benoit Pereira da silva développeur d&#039;applications mobiles natives iphone, Ipad , Ipod - consultant en conception centrée sur les usages</title>
	<atom:link href="http://pereira-da-silva.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pereira-da-silva.com</link>
	<description>Services en études et développement d’applications mobiles natives sur Iphone, Ipad, Ipod (IOS SDK – 3 – 5.x – Objective C 2.0)</description>
	<lastBuildDate>Fri, 27 Jan 2012 06:41:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ce que vous trouverez dans ces notes.</title>
		<link>http://pereira-da-silva.com/ce-que-vous-trouverez-dans-ces-notes/</link>
		<comments>http://pereira-da-silva.com/ce-que-vous-trouverez-dans-ces-notes/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 11:21:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Notes et astuces Objective C]]></category>

		<guid isPermaLink="false">http://pereira-da-silva.com/?p=789</guid>
		<description><![CDATA[Je publie(rai) des notes brèves et astuces avancées à usages des développeurs mobiles utilisant le IOS SDK.]]></description>
			<content:encoded><![CDATA[<p>Je publie(rai) des notes brèves et astuces avancées à usages des développeurs mobiles utilisant le IOS SDK.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fpereira-da-silva.com%2Fce-que-vous-trouverez-dans-ces-notes%2F&amp;title=Ce%20que%20vous%20trouverez%20dans%20ces%20notes." id="wpa2a_2"><img src="http://pereira-da-silva.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://pereira-da-silva.com/ce-que-vous-trouverez-dans-ces-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment différer l&#8217;invocation d&#8217;un bloc en Objective C ?</title>
		<link>http://pereira-da-silva.com/comment-differer-lexecution-dun-ensemble-dinstructions/</link>
		<comments>http://pereira-da-silva.com/comment-differer-lexecution-dun-ensemble-dinstructions/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 07:51:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Notes et astuces Objective C]]></category>
		<category><![CDATA[blocks]]></category>
		<category><![CDATA[Objective C]]></category>

		<guid isPermaLink="false">http://pereira-da-silva.com/?p=738</guid>
		<description><![CDATA[Vous savez très certainement différer l&#8217;invocation d&#8217;un sélecteur (méthode d&#8217;un objet Objective C) en utilisant les méthodes  dédiées de NSObject. performSelector:withObject:afterDelay Par exemple : 1 &#91;self performSelector:@selector&#40;display:&#41; withObject:myChain afterDelay:1&#93;; &#8220;performSelector:withObject:afterDelay&#8221; ne peut pas invoquer : Une méthode comportant un type différent de NSObject. (Ligne 1 du code ci-dessous) Une méthode comportant plusieurs argument (Lignes 2 à [...]]]></description>
			<content:encoded><![CDATA[<p>Vous savez très certainement différer l&#8217;invocation d&#8217;un sélecteur (méthode d&#8217;un objet Objective C) en utilisant les méthodes  dédiées de NSObject.<a title="Documentation apple" href="http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay:" target="_blank"> performSelector:withObject:afterDelay</a> </p>
<p>Par exemple :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>self performSelector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>display<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span>myChain afterDelay<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>&#8220;performSelector:withObject:afterDelay&#8221; ne peut pas invoquer : </p>
<ul>
<li>
Une méthode comportant un type différent de NSObject. (Ligne 1 du code ci-dessous)
</li>
<li>
Une méthode comportant plusieurs argument (Lignes 2 à 3)
</li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>doSomethingWithBool<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>shouldDoThat;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>doSomethingWithFirstArgument<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>firstString 
                  andSecondArgument<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>secondString;</pre></td></tr></table></div>

<p>Il conviendrait de pouvoir différer l&#8217;exécution d&#8217;un bloc de code arbitraire, comportant un ou des appels différés. Comment différer l&#8217;exécution d&#8217;un bloc ? </p>
<h2>Solution :</h2>
<p>Nous allons utiliser Grand Central Dispatch (GCD) pour différer l&#8217;exécution d&#8217;un bloc. (cette solution est compatible avec IOS 4.x et plus)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">   <span style="color: #a61390;">int</span> delay<span style="color: #002200;">=</span><span style="color: #2400d9;">1</span>; <span style="color: #11740a; font-style: italic;">// Délai en secondes </span>
   dispatch_after<span style="color: #002200;">&#40;</span> dispatch_time<span style="color: #002200;">&#40;</span>DISPATCH_TIME_NOW, delay <span style="color: #002200;">*</span> NSEC_PER_SEC<span style="color: #002200;">&#41;</span>,
                   dispatch_get_current_queue<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>, <span style="color: #002200;">^</span><span style="color: #002200;">&#123;</span>
       <span style="color: #11740a; font-style: italic;">// Le &quot;bloc&quot; à exécuter </span>
       <span style="color: #002200;">&#91;</span>self doSomethingWithBool<span style="color: #002200;">:</span><span style="color: #a61390;">NO</span><span style="color: #002200;">&#93;</span>;
       <span style="color: #002200;">&#91;</span>self doSomethingWithFirstArgument<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;one&quot;</span> andSecondArgument<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;two&quot;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#41;</span>;</pre></td></tr></table></div>

<h2>Création d&#8217;une méthode générique pour différer l&#8217;exécution d&#8217;un bloc :</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>performBlock<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">^</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>block afterDelay<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSTimeInterval<span style="color: #002200;">&#41;</span>delay <span style="color: #002200;">&#123;</span>
   dispatch_after<span style="color: #002200;">&#40;</span> dispatch_time<span style="color: #002200;">&#40;</span>DISPATCH_TIME_NOW, delay <span style="color: #002200;">*</span> NSEC_PER_SEC<span style="color: #002200;">&#41;</span>,
                  dispatch_get_current_queue<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>,block<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Exemple d&#8217;invocation :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">  <span style="color: #002200;">&#91;</span>self performBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
       <span style="color: #002200;">&#91;</span>self doSomethingWithFirstArgument<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;one&quot;</span> andSecondArgument<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;two&quot;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span> afterDelay<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>Que se passe-t&#8217;il si nous nous utilisons un délai == 0 ?<br />
Le code est exécuté immédiatement à la fin de la pile d&#8217;exécution (&#8220;run loop&#8221;)</p>
<p>Vous pouvez si vous le souhaitez créer une catégorie NSObject+Blocks pour intégrer cette méthode au comportement standard des NSObject. Pour ma part je préfère utiliser un singleton utilitaire pour ce type de tâche.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fpereira-da-silva.com%2Fcomment-differer-lexecution-dun-ensemble-dinstructions%2F&amp;title=Comment%20diff%C3%A9rer%20l%26%238217%3Binvocation%20d%26%238217%3Bun%20bloc%20en%20Objective%20C%20%3F" id="wpa2a_4"><img src="http://pereira-da-silva.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://pereira-da-silva.com/comment-differer-lexecution-dun-ensemble-dinstructions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

