weak-linking

tabliertablier Membre
août 2013 modifié dans API AppKit #1

Jamais utilisé, alors j'ai quelques questions avant de me lancer.


 


je compile sous 10.7 avec Base SDK 10.7 et  deployement target  10.5  et j'obtiens des "deprecated en pagaille". Donc je dois utilisé le "weak-linking". J'ai été lire la Doc et j'ai trouvé ça:



 


For example, suppose in Xcode you set the deployment target (minimum required version) to “Mac OS X 10.5” and the base SDK (maximum allowed version) to “Mac OS X 10.6”. During compilation, the compiler would weakly link interfaces that were introduced in Mac OS X v10.6 while strongly linking interfaces defined in earlier versions of the OS. This would allow your application to run in Mac OS X v10.5 and take advantage of newer features when available.



Si je comprends bien ce qui est dit là , le linker va utiliser le SDK 10.5 pour "lier en dur" et 10.7 pour le weak-linking. Correcte?


Si le SDK 10.5 n'est pas installé dans Xcode sous 10.7, comment cela peut-il marché  ?

Pour me fixer les idées: Si la méthode du NSFileManager sous 10.5 est  truc:param1:param2  et qu'elle est deprecated  sous 10.7 est-ce que l'écriture est correcte?

 


  gestion = [NSFileManager defaultManager] ;


  if ([gestion instancesRespondToSelector:@selector(truc:param1:param2)])

   {  // utilisation de  truc  }

 else

   {  // code alternatif avec des méthodes de 10.7  } ;


 



 


Réponses

  • Deprecated ne signifie pas que la méthode n'existe plus.


     


    Regarde dans les options du compilo et décoche "Warn about deprecated fonctions"

  • Et du coup ton code n'est pas correct. Il faut faire dans l'autre sens :


    Si la nouvelle méthode existe alors l'utiliser, sinon utiliser la méthode deprecated.

  • tabliertablier Membre
    août 2013 modifié #4

    @mpergand


    Les deprecated méthodes ne sont pas immédiatement supprimées. Mais elles finissent par l'être, c'est dit clairement dans la doc. Donc il est intéressant que je m'en préoccupe et que j'apprenne comment régler ce problème.


     


     @jpimbert


    donc je fais l'inverse avec machin existant dans le SDK 10.7 et qui remplace truc du SDK 10.5:



     gestion = [NSFileManager defaultManager] ;


      if ([gestion instancesRespondToSelector:@selector(machin)])

       {  // utilisation de  machin  }

     else

       {  // utilisation de truc de 10.5  } ;


    Il reste que le SDK 10.5 n'est peut être pas installer sous Xcode 4.3.2. Il faut que je vérifie.


    Donc, question subsidiaire: ai-je le droit d'ajouter dans Xcode 4.3.2 le SDK 10.5 ou 10.4?


Connectez-vous ou Inscrivez-vous pour répondre.