Osservando la definizione di NS_INLINE sembra che il vantaggio di utilizzarlo su linea statica sia compatibile con il compilatore, è corretto?
Solo in parte. È necessario valutare la toolchain dominante qui e chiedere "perché è stato utilizzato static inline
non o perché è stato inadeguato?". La toolchain dominante contiene l'attributo __attribute__((always_inline))
. Quindi ci sono davvero due parti:
a) Compatibilità In tal modo aggiunge compatibilità per più compilatori.
b) Uso di __attribute__((always_inline))
nella toolchain dominante. inline
ha devoluto per essere una semplice richiesta a inline
. Con always_inline
, il compilatore può comunque riservarsi il diritto di non integrare la funzione (per ovvi motivi). Tuttavia, dice anche "fidati di me, voglio questo compilatore inline, inline questo se possibile". Questo attributo ripristina alcune delle capacità di inline al programmatore. Questo può essere usato per le prestazioni, ma sospetto (in questo caso) che abbia più a che fare con la riduzione del numero di funzioni private esportate, piuttosto che con i requisiti di prestazione.
caso NS_INLINE sempre essere usato al posto di linea statica in progetti di Objective-C?
n. __attribute__((always_inline))
deve essere riservato a persone che hanno avuto molta esperienza nell'ottimizzare i programmi e con l'uso di questa funzione. Questo attributo può essere applicato a funzioni C, metodi C++ e altre chiamate statiche. Non può essere applicato alla classe ObjC o ai metodi di istanza (che sono dinamici). Lo dico perché il compilatore, l'ottimizzatore e LTO sono molto bravi in quello che fanno. Nel frattempo, l'uso improprio di inlining può avere (nessuna) diverse penalizzazioni prestazionali. L'eccezione (per le persone che non hanno speso molto tempo ad ottimizzare) è ovviamente quando ci si prende il tempo per misurare le differenze che fa.
E se il codice fosse per una libreria usata da altri, consiglieresti di usare 'NS_INLINE' allora? – keegan3d
Sta per essere utilizzato su piattaforme diverse da quelle di Apple? Con GnuStep o qualcosa di simile? Se no, allora no. C'è approssimativamente zero possibilità che lo sviluppo per Mac OS X o iOS sarà mai incompatibile con 'static inline'. –