Penso che il titolo spieghi abbastanza bene la mia domanda, al momento sto lavorando a un piccolo framework per le mie esigenze personali e ho pensato di costruirlo con ARC (se è possibile?), E usarlo in vecchi progetti che erano costruito prima di ARC?Posso creare un framework ARC e usarlo in un progetto non ARC?
risposta
Sì, con un avvertimento: se si dispone di iOS 4.x come destinazione di distribuzione, è necessaria una libreria supplementare per gestire il codice compilato da ARC sul runtime precedente. Per un'applicazione creata utilizzando ARC, questa è inclusa nell'applicazione. Questo non è incluso se si sta utilizzando una libreria compilata ARC in un'applicazione non ARC.
È possibile collegare manualmente questa libreria all'applicazione non ARC per evitare problemi di runtime nelle versioni precedenti del sistema operativo aggiungendo -fobjc-arc
ai propri altri Linker Flag per l'applicazione.
Vedere this Apple Developer Forums thread per ulteriori discussioni su questo.
Va bene. La libreria è già compilata, quindi ARC/NonARC non dovrebbe più importare.
C'è un potenziale problema con il vecchio runtime e le librerie statiche abilitate ARC, che ho dettagliato nella mia risposta. –
È possibile collegare alla libreria di colla fornita da Apple (come ha detto Brad nella sua risposta sopra). Tuttavia, il qualificatore di variabile __weak non è compatibile con i sistemi operativi inferiori a 4.3 (Come menzionato qui: iOS 5 Best Practice (Release/retain?) in un commento di sudo).
In realtà, l'ho provato in questo momento in un progetto e non è stato d'aiuto, non hai avuto la possibilità di dare un'occhiata? http://stackoverflow.com/questions/8375233/ld-duplicate-symbol-objc-retainedobject-on-ios-4-3-but-not-on-ios-5-0 –
Perché dovrebbero esserci problemi di runtime? ARC non lo sta facendo al momento della compilazione? –
@ZakyGerman - ARC non si limita a iniettare '-retain' e' -release' nei punti giusti, e introduce cose come il nuovo '@ autoreleasepool', quindi ha bisogno di un piccolo aiuto in fase di esecuzione per questo. Questo è integrato in iOS 5.0, ma 4.x richiede questa libreria di compatibilità all'indietro. –