Fuite mémoire ou boucle défaillante

2»

Réponses

  • 'Kubernan' a écrit:


    Jme doute, je ne parlais pas d'une solution de remplacement, mais juste que par déduction on pouvait penser qu'il n'utilisait pas ARC et que donc ça manquait de release.




    Je pense qu'il vaut mieux pour cocoacola71 d'en apprendre davantage sur sur la gestion mémoire et le multi-threading avant de se lancer dans ARC
  • J'approuve, j'ai donc trouvé ma fuite image/smile.png' class='bbc_emoticon' alt=':)' />

    CFNumber! 100KB à  1.5MB et ça plante!

    Seul ma boucle tourne, est-ce le traitement des chiffres qui grossi CFNumber??

    Car j'utilise int et double, il accumule toutes mes opérations.

    Est il possible d'éviter cela??
  • MalaMala Membre, Modérateur
    CFNumber c'est un objet pas un type C de base. On peut voir ton code mis à  jour?
  • cocoacola71cocoacola71 Membre
    mars 2012 modifié #35
    Merci de ton aide, mais là  je ne comprend pas et je tourne en rond!`
    <br />
    -(void)defilementThrd{<br />
       if(&#33;[defilement isEqualToString:@&quot;&quot;])<br />
       {<br />
    	   NSLog(@&quot;Defilement : %@&quot;, defilement);<br />
    	   NSArray *cutMessage = [defilement componentsSeparatedByString:@&quot;&#036;&quot;];<br />
    	  <br />
    	   dispatch_queue_t queue = dispatch_queue_create(&quot;queueWhile&quot;, NULL);<br />
    	   dispatch_async(queue, ^{<br />
    			<br />
    			NSString *cutMessage1 = [[NSString alloc]initWithString:[cutMessage objectAtIndex:0]];<br />
    			NSLog(@&quot;cut1: %@&quot;, cutMessage1);<br />
    			<br />
    			NSString *cutMessage2 = [[NSString alloc]initWithString:[cutMessage objectAtIndex:1]];<br />
    			if([cutMessage1 isEqualToString:@&quot;&quot;])<br />
    				cutMessage2 = @&quot;&quot;;<br />
    			NSLog(@&quot;cut2: %@&quot;, cutMessage2);<br />
    			<br />
    			NSString *cutMessage3 = [[NSString alloc]initWithString:[cutMessage objectAtIndex:2]];<br />
    			if([cutMessage2 isEqualToString:@&quot;&quot;])<br />
    				cutMessage3 = @&quot;&quot;;<br />
    			NSLog(@&quot;cut3: %@&quot;, cutMessage3);<br />
    			<br />
    			NSString *cutMessage4 = [[NSString alloc]initWithString:[cutMessage objectAtIndex:3]];<br />
    			if([cutMessage3 isEqualToString:@&quot;&quot;])<br />
    				cutMessage4=@&quot;&quot;;<br />
    			NSLog(@&quot;cut4: %@&quot;, cutMessage4);<br />
    			<br />
    			int i = 0;<br />
    			<br />
    			if(cutMessage1 &#33;= @&quot;&quot;){<br />
    				i++;<br />
    				if(cutMessage2 &#33;= @&quot;&quot;) {<br />
    					i++;<br />
    					if(cutMessage3 &#33;= @&quot;&quot;){<br />
    						i++;<br />
    						if(cutMessage4 &#33;= @&quot;&quot;){<br />
    							i++;<br />
    						}<br />
    					}<br />
    				}<br />
    			}<br />
    	<br />
    		   double h = 0;<br />
    		   int j = 0;<br />
    		   while (YES) {<br />
    			j++;<br />
    			h = 0;<br />
    			NSLog(@&quot;nombre: %lu&quot;, (unsigned long)[affichage retainCount]);<br />
    			switch (j) {<br />
    				case 1:<br />
    					while (h&lt;13) {<br />
    						dispatch_async(dispatch_get_main_queue(), ^{<br />
    						[affichage setFont:[NSFont systemFontOfSize:h]];<br />
    						[affichage setStringValue:cutMessage1];<br />
    						});<br />
    						h = h+0.05;<br />
    						[NSThread sleepForTimeInterval:0.001];<br />
    					}<br />
    					[NSThread sleepForTimeInterval:4.0];<br />
    <br />
    					break;<br />
    				case 2:<br />
    					while (h&lt;13) {<br />
    						dispatch_async(dispatch_get_main_queue(), ^{<br />
    						[affichage setFont:[NSFont systemFontOfSize:h]];<br />
    						[affichage setStringValue:cutMessage2];<br />
    						});<br />
    						h = h+0.05;<br />
    						[NSThread sleepForTimeInterval:0.001];<br />
    					}<br />
    					[NSThread sleepForTimeInterval:4.0];<br />
    					break;<br />
    				case 3:<br />
    					while (h&lt;13) {<br />
    						dispatch_async(dispatch_get_main_queue(), ^{<br />
    						[affichage setFont:[NSFont systemFontOfSize:h]];<br />
    						[affichage setStringValue:cutMessage3];<br />
    						});<br />
    						h = h+0.05;<br />
    						[NSThread sleepForTimeInterval:0.001];<br />
    					}<br />
    					[NSThread sleepForTimeInterval:4.0];<br />
    					break;<br />
    				case 4:<br />
    					while (h&lt;13) {<br />
    						dispatch_async(dispatch_get_main_queue(), ^{<br />
    						[affichage setFont:[NSFont systemFontOfSize:h]];<br />
    						[affichage setStringValue:cutMessage4];<br />
    						});<br />
    						h = h+0.05;<br />
    						[NSThread sleepForTimeInterval:0.001];<br />
    <br />
    					}<br />
    					[NSThread sleepForTimeInterval:4.0];<br />
    					break;<br />
    				default:<br />
    				   break;<br />
    			}<br />
    			if(j==i)<br />
    				j=0;<br />
    		}<br />
    			[cutMessage1 release];<br />
    			[cutMessage2 release];<br />
    			[cutMessage3 release];<br />
    			[cutMessage4 release];<br />
    			<br />
    	});<br />
    	   dispatch_release(queue);<br />
       }<br />
    	<br />
    }<br />
    <br />
    <br />
    
  • Ah bah c'est bien tu as bien compris ce que je t'ai écris en exemple image/sleep.png' class='bbc_emoticon' alt='-_-' />
  • A c'est pas faut, je n'ai pas fait attention à 
    <br />
    dispatch_async(dispatch_get_main_queue(), ^{<br />
    


    Rectification de suite!!
  • Bah c'est un peu le truc clef en gros. Sinon toute la discussion qu'on a eu en amont sur le refresh de l'UI sur le main thread n'aura servi à  rien. image/wink.png' class='bbc_emoticon' alt=';)' />
  • image/unsure.png' class='bbc_emoticon' alt=' :* ' /> il est vrai que j'ai vraiment foiré!!!
  • Mécréant image/whip.gif' class='bbc_emoticon' alt=' >:) ' />

    Et sinon ça marche maintenant ?
  • cocoacola71cocoacola71 Membre
    mars 2012 modifié #41
    Autant pour moi CFNumber prenait du volume du à  ma grossière erreur...

    LOL oui tout à  l'air de fonctionner pour le mieux!
  • MalaMala Membre, Modérateur
    J'ai vraiment du mal avec la syntaxe des blocks. Je trouve ça dégeux en terme de lisibilité. Mais ce n'est que mon avis... image/tongue.png' class='bbc_emoticon' alt=':P' />
  • Ca change pas fondamentalement d'un code sans block au final. Moi ça me choque pas. Et puis tu peux découper le tout et l'appeler comme des fonctions. C'est vraiment très pratique.
  • CéroceCéroce Membre, Modérateur
    mars 2012 modifié #44
    @Mala

    C'est aussi le mien. Surtout quand plusieurs blocs sont imbriqués au sein d'un appel de méthode.
  • cocoacola71cocoacola71 Membre
    mars 2012 modifié #45
    [font=arial,helvetica,sans-serif]Je viens de voir que - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait et dispatch_async() se valent.

    Pour ma rotation d'image (que j'ai fait par dans un ancien post, dont Mala m'a grandement aidé) le résultat est le même quelque soit la méthode utilisée. L'image bloque![/font]
Connectez-vous ou Inscrivez-vous pour répondre.