Optimisation 56K

07:47 modifié dans API AppKit #1
Bonsoir,

Je vous expose le problème :
à‰lément -> - NSArray contenant NSDictionaries
Chaques dico contient les 2 keys suivantes :
- name (NSString)
- URL (NSString)
Voici mon code pour afficher ça dans un popup :
// DOWNLOAD MENU<br />	menuArray = [freeware objectForKey:@&quot;downloadURL&quot;]; // NSArray<br />	e = [menuArray objectEnumerator]; // NSEnumerator<br /><br />	while ( object = [e nextObject] ) { <br />		NSURL*	_urlD = [NSURL URLWithString:[object objectForKey:@&quot;URL&quot;]];<br />		NSString*	_downloadTitle;<br />		NSString*	_extensionName = [[[_urlD path] pathExtension] uppercaseString];<br />		NSString*	_lengthS;<br />		<br />		 _lengthS = [_urlD propertyForKey:@&quot;content-length&quot;];<br />		int length = [_lengthS intValue];<br />		if(!_lengthS)<br />			_downloadTitle = [NSString stringWithFormat:@&quot;%@ (%@)&quot;,[object objectForKey:@&quot;name&quot;],_extensionName];<br />		else<br />			if(length&gt;=1000000)<br />				_downloadTitle = [NSString stringWithFormat:NSLocalizedString(@&quot;%@ (%@ - %iMb)&quot;,nil),[object objectForKey:@&quot;name&quot;],_extensionName, (length/1000000)];<br />			else <br />				_downloadTitle = [NSString stringWithFormat:NSLocalizedString(@&quot;%@ (%@ - %iKb)&quot;,nil),[object objectForKey:@&quot;name&quot;],_extensionName, (length/1000)];<br />		<br />		[downloadMenu addItemWithTitle:_downloadTitle action:@selector(getDownload:) keyEquivalent:@&quot;&quot;];<br />		[[downloadMenu itemAtIndex:[menuArray indexOfObject:object]] setImage:[NSImage imageNamed:@&quot;MenuDownload&quot;]];<br />	}<br /><br />	//[downloadMenu retain];<br />	[TBDownloadButton setMenu:downloadMenu];

Le problème est que avec mon 56K et quand il y a 5 dictionnaires dans l'array, j'ai la roue qui tourne  >:D pendant quelques secondes à  cause de la récuparation de la taille du fichier.
Bien gênant quand même ... Alors est-il possible d'effectuer mon code "en fond" pour éviter la roue de chargement ?

Merci d'avance,
Louka.

Réponses

  • 07:47 modifié #2
    Tu fais la requête web dans un nouveau thread (il y a assez sur ce forum).
  • 07:47 modifié #3
    Pas très explicite
  • AliGatorAliGator Membre, Modérateur
    mars 2006 modifié #4
    dans 1142544541:

    Pas très explicite
    Ca veut dire qu'il faut que tu fasses mumuse avec la classe NSThread, pour créer un nouveau thread et lui faire effectuer le téléchargement. Ainsi en passant par un Thread séparé le code executé sera executé dans une autre RunLoop, séparée, ce que tu appelles "en tâche de fond".

    Tu peux même faire mieux, créer un Thread par téléchargement que tu souhaites effectuer.
    en gros :
    for(i=0;i<nbDownloads;i++) {
    // creer un thread pour télécharger le fichier
    }
    Et chaque thread téléchargera un fichier, donc autant de threads que de downloads.


    Pour le reste, RTFM sur "NSThread", et recherche sur OC y'a plein de posts sur les threads.
    Entre autres celui là  à  l'air de s'en rapprocher (j'ai pas tout lu mais bon)
  • 07:47 modifié #5
    Merci Ali ! Je regarde la doc ... quand j'aurai le temps
    J'ai mon oral lundi et la pratique mercredi donc j'ai pas vraiment de temps pour regarder ça. En plus ce week-en je fête 1 an d'amour avec ma chérie  :p :p

    Merci encore,
    Louka
  • 07:47 modifié #6
    Heu bon ben en fait j'ai réussi à  l'intstant, j'ai vite regardé la doc et j'ai réussi mon thread, impec ducoup :)
Connectez-vous ou Inscrivez-vous pour répondre.