Non ho nessun dubbio che il contare di riferimento automatico (l'ARCO) è il vicino salto grande avanti per Obiettivo-C dall'introduzione d'Obiettivo-C 2.0. L'ARCO Le permette di mettere il carico di direzione di memoria su (l'Apple LLVM 3.0) il compilatore, e pensare mai ritiene, rilascia e autorilascia mai di nuovo.
Poiché le prime esperienze di molto utente con ARCO staranno provando a convertire app esistente, loro impareranno il modo duro che conversione di codice esistente per FORMARE UN ARCO ELETTRICO non è un fuoco & dimentichi l'operazione. E poiché questo è l'Internet, ci sono anche molte supposizioni, affermazioni false e altri miti che girano INTORNO AD ARCO andante in giro.
Così qui è quasi tutto che Lei ha bisogno di sapere su ARCO, e alcun ARCO-MYTHBUSTING anche.
- I Requisiti di sviluppo per ARCO apps
- Gli Obiettivi di Schieramento minimi per ARCO apps
- Obiettivi di Schieramento richiesti con riferimenti deboli zeroing
- Come permettere l'ARCO nel Suo progetto
- Compili errori dopo commutazione a LLVM 3.0
- Acquisizione di biblioteche di terzi costruire con ARCO
- Conversione di app esistente per FORMARE UN ARCO ELETTRICO
- “Non può Convertire in ARCO Oggettivo-C”
- Il fissaggio di lancetta batte a macchina in C structs
- Fissando C/C ++ la lancetta si trasferisce con lanci fatti un ponte
- Fissaggio di NSAutoreleasePool con @autoreleasepool
- I metodi Lei non può chiamare (o annullare) più
- Lei può ancora annullare - (il vuoto) dealloc {}
- Restrizione di nomina di proprietà
- Nuove parole chiave di Proprietà: forte e debole
- L'ARCO vieta la sintetizzazione di una proprietà readonly senza aggettivo qualificativo di proprietà
- Per esperti: la rivelazione a compila volta se l'ARCO è permesso
- Per esperti: permetta l'uso di parole chiave d'ARCO con invalidi d'ARCO
- Mito: l'ARCO non è stato provato attendibile
- Mito: l'ARCO porta via il controllo su direzione di Memoria
- Documentazione di Riferimento d'ARCO
I Requisiti di sviluppo per ARCO apps
- Xcode 4.2
- Il compilatore di Apple LLVM 3.0 (Costruiscono l'Installazione)
- SOLUZIONE INTEGRATA PER UFFICIO app sviluppo: il Leopardo di Neve 10.6 e più nuovo
- Mac app sviluppo: il Leone 10.7 e più nuovo
Non c'è nessuno sviluppo d'ARCO per Mac apps sotto Leopardo di Neve! E Xcode 4.1 e ancora prima non viene legato in un fascio con il compilatore di Apple LLVM 3.0 (il Fragore) che è la prima versione di compilatore di Fragore da sostenere l'ARCO.
Gli Obiettivi di Schieramento minimi per ARCO apps
- dispositivi di SOLUZIONE INTEGRATA PER UFFICIO: LA SOLUZIONE INTEGRATA PER UFFICIO 4.0 o più nuovo
- Computer di Mac: Mac con unità centrale di 64 bit che dirige il Leopardo di Neve 10.6 o più nuovo.
Il Mac OS X apps con ARCO permise sono apps sempre di 64 bit. Lei non può costruire l'ARCO di 32 bit apps.
Macs con almeno una 2 unità centrale di Duo Principale sarà capace di dirigere apps di 64 bit. Macs con il Duo Principale di 32 bit o l'Assolo Principale (Yonah) le unità centrali non può dirigere l'ARCO apps. Macs di 32 bit sono stati interrotti vicino alla fine del 2006, ad eccezione del Duo Principale Mac mini che fu interrotto in agosto 2007. The 32-Bit Macs have been discontinued near the end of 2006, with the exception of the Core Duo Mac mini which was discontinued in August 2007.
Obiettivi di Schieramento richiesti con riferimenti deboli zeroing
- dispositivi di SOLUZIONE INTEGRATA PER UFFICIO: LA SOLUZIONE INTEGRATA PER UFFICIO 5.0 o più nuovo
- Computer di Mac: il Leone 10.7 o più nuovo.
Lei non può "per caso" usare riferimenti deboli zeroing senza notarlo. Lei dovrà o usare la parola chiave @property debole o __ la parola chiave debole dichiarando una variabile. Se Lei usa una di queste parole chiave, il compilatore genererà un errore se Lei non ha messo già l'obiettivo di schieramento di conseguenza a SOLUZIONE INTEGRATA PER UFFICIO 5.0 o a Mac OS X 10.7. If you use one of these keywords, the compiler will generate an error if you haven’t yet set the deployment target accordingly to either iOS 5.0 or Mac OS X 10.7.
Tutti Macs capace di Leone corrente 10.7 possono dirigere l'ARCO di 64 bit apps. Il leone è primo 64-Bit-only Mac OS X sistema operativo.
Come permettere l'ARCO nel Suo progetto
Lei avrà bisogno di assicurarsi che l'Installazione Costruire per Compilatore per C/C ++/Objective-C è messa a compilatore di Apple LLVM 3.0.
Questo è particolarmente importante per progetti esistenti che possono ancora esser messi a usare LLVM GCC 4.2 o altro compilatore. Se Lei non sceglie il LLVM 3.0 compilatore, nessuno dell'ARCO fu collegato le installazioni si faranno vive nella lista d'Installazioni Costruire.
Con LLVM 3.0 scelto come compilatore l'Obiettivo-C d'Installazione Costruire il Contare di Riferimento Automatico può esser messo a SÌ. Se Lei crea un nuovo progetto di una sagoma Xcode Lei anche avrà la scelta di permettere l'ARCO nel nuovo mago di progetti scegliendo l'Uso il Contare di Riferimento Automatico.
Compili errori dopo commutazione a LLVM 3.0
Se Lei prima usava un compilatore diverso, è assolutamente possibile che LLVM 3.0 genererà nuovi avvertimenti e gli errori dove non ci fu nessuno prima, perfino con invalidi d'ARCO. Questo è il LLVM 3.0 compilatore che diventò un un po' migliore all'atto di rivelazione di codice potenzialmente pericoloso.
Raccomando di prima costruire il Suo app con LLVM che 3.0 compilatore e ARCO hanno mutilato, per assicurarsi tutto LLVM 3.0 problemi imparentati sono stati fissati prima di tentativo di convertire il Suo codice per FORMARE UN ARCO ELETTRICO.
Ad esempio, LLVM 3.0 è adesso capace di scoprire alcun “assortimento potenziale fuori dai limiti” i problemi grazie al progetto di SAFECode, e questo sta un po' più tormentando quando si tratta di gettare di un tipo all'altro, soprattutto collegato a spaghi di formato. La maggior parte di questi problemi sono facili da prendere una decisione. In effetti, LLVM 3.0 La aiuta a determinare dove il problema è attraverso diagnostics espressivo, ma sfortunatamente Xcode nasconde questo piuttosto bene all'utente. In fact, LLVM 3.0 helps you determine where the issue is through expressive diagnostics, but unfortunately Xcode hides that pretty well from the user.
Per vedere diagnostics espressivo in Xcode, vada al Navigatore di Tronco (Command+7) e scelga il tronco più recente con l'avvertimento o l'errore in lui:
Allora faccia scattare il pulsante di dettagli a destra del simbolo d'avvertimento/errore (soltanto al di sopra di "più" il collegamento) per vedere il LLVM 3.0 affermazione diagnostics espressiva, indicando esattamente al carattere o la gamma di caratteri che causano il problema:
Acquisizione di biblioteche di terzi costruire con ARCO
La prima cosa fare con biblioteche di terzi incompatibili è quella di costruirli come una biblioteca statica separata. Prenda ad esempio Cocos2D la cui sagoma di progetto di Xcode semplicemente mette tutto il codice di Cocos2D in obiettivo del Suo progetto. Sarebbe un incubo per provare e aggiornare il codice di biblioteca Cocos2D intero per sostenere l'ARCO. Mentre Lei può mutilare l'ARCO per file di codice sorgente individuali con la bandiera di compilatore-fno-objc-arc, sarebbe tedioso per fare così per più che soltanto alcuni file. It would be a nightmare to try and update the entire Cocos2D library code to support ARC. While you can disable ARC for individual source code files with the -fno-objc-arc compiler flag, it would be tedious to do so for more than just a few files.
Appena Lei costruisce il codice sorgente Cocos2D separatamente come una biblioteca statica, i cambiamenti richiesti sono limitati a tre posti: CCDirector (tolgono NSAutoreleasePool), CCActionManager (aggiungono __ unsafe_unretained) e CCArray (aggiungono __ unsafe_unretained, il rifattore inline il codice in file d'esecuzione). Tim Games minuscolo ha abbozzato questi cambiamenti e provvede una forchetta di cocos2d-iphone che è compatibile con ARCO – se costruito come una biblioteca statica.Tiny Tim Games have outlined these changes and provide a fork of cocos2d-iphone that is compatible with ARC – if built as a static library.
A proposito, Kobold2D è completamente compatibile con ARCO. In effetti questo ha l'ARCO permesso implicitamente in tutti i progetti ritenendo pieno indietro la compatibilità se Lei non vuole usare l'ARCO!
Se edificio di una biblioteca statica ancora causa troppi problemi con quella biblioteca, poi vada a foro di quella biblioteca, cerchi posti collegati d'arco e/o il sostegno d'ARCO di richiesta. Molte biblioteche di sorgente aperte perfino non compilano in modo pulito con LLVM 3.0 già, per tacere d'ARCO di sostegno. Questo ha bisogno di cambiare rapidamente perché il sostegno di progettista di biblioteca direttamente influenza il tasso d'adozione d'ARCO. This needs to change quickly because library developer support directly influences the adoption rate of ARC.
Conversione di app esistente per FORMARE UN ARCO ELETTRICO
C'è un app per questo!
Bene, per essere precisa c'è una scelta di menù in Xcode 4.2 per questo. Lei lo troverà se Lei apre il Suo progetto in Xcode e sceglie Curano-> il Rifattore-> il Convertito AD ARCO Oggettivo-C.
Lei sarà regalato una lista d'obiettivi che Lei vuole convertire. Si assicuri che Lei non sceglie nessuna biblioteca statica che Lei non ha scritto stesso. Le biblioteche statiche possono esser collegate ad app permesso l'ARCO senza veramente bisogno avere di essere l'ARCO compatibile. Sebbene Lei debba fare alcuni cambiamenti a file di testata della biblioteca. Più su questo più tardi. Static libraries can be linked to an ARC-enabled app without actually having to be ARC compatible. Although you may have to make some changes to the library’s header files. More on that later.
“Non può Convertire in ARCO Oggettivo-C”
Oh caro!
In alcuni casi la conversione automatica non è così automatica come Lei spererebbe che sarebbe. In molti casi questo è a causa di biblioteche statiche incompatibili.
In la maggior parte riveste i problemi sono collegati solamente a id o altri tipi di lancetta fatti provvista in un C struct, delle lancette fuggevoli a e da C/C ++ il codice o l'uso della classe NSAutoreleasePool che non è disponibile costruendo un app con ARCO permisero. Seguitato a leggere per soluzioni dei problemi più comuni.
Il fissaggio di lancetta batte a macchina in C structs
L'ARCO si lamenterà di un C struct che fa provvista di tipi di lancetta:
id someObject;
void* somePointer;
SomeClass* someClassInstance;
} someStruct;
Questo è abbastanza facile da fissare presospendendo i tipi di lancetta con __ unsafe_unretained la parola chiave:
__ unsafe_unretained id someObject;
__ unsafe_unretained void* somePointer;
__ unsafe_unretained SomeClass* someClassInstance;
} someStruct;
Questo dice all'ARCO che la memoria per questi che la lancetta batte a macchina è diretta manualmente, cioè la strada vecchia e scolastica. D'ora innanzi il tipo di lancetta è "irritenuto" da ARCO, e è "pericoloso" perché la memoria può essere deallocated ma la lancetta non è messa a zero automaticamente, che può forse creare una lancetta pendente. Questo è il modo che è stato tutto il tempo, l'ARCO soltanto vuole che Lei esplicitamente ammetta che Lei sta facendo qualcosa che è considerata pericolosa. That’s the way it has been all the time, ARC just wants you to expressly admit that you’re doing something that is considered unsafe.
Se il Suo codice lavorò eccellente prima, __ l'unsafe_unretained semplicemente si assicurerà che questo compila sotto ARCO. Ma per nuovo codice Lei deve evitare di bisogno avere di usare quella parola chiave. Una scelta è quella di cambiare tutto C structs in classi Oggettive-C leggere con proprietà. One option is to change all C structs into lightweight Objective-C classes with properties.
Fissando C/C ++ la lancetta si trasferisce con lanci fatti un ponte
In casi dove Lei sta passando id o lancette d'oggetto a e da C/C ++ il codice, il compilatore si lamenterà della conversione e suggerirà un lancio fatto un ponte:
b2BodyDef bodyDef;
bodyDef.userData = aSprite; //ERRORE! // ERROR!
//L'acquisizione del folletto userdata da Box2D
Il folletto di CCSprite* = (CCSprite *) il corpo-> GetUserData (); //ERRORE!CCSprite*)body->GetUserData(); // ERROR!
Di nuovo questo è facile da fissare in modo conveniente gettando il tipo di lancetta e presospendendolo con __ la parola chiave di ponte:
b2BodyDef bodyDef;
il bodyDef.userData = (__ fanno un ponte su vuoto *) aSprite;__bridge void*)aSprite;
//L'acquisizione del folletto userdata da Box2D
Il folletto di CCSprite* = (__ fanno un ponte su CCSprite *) il corpo-> GetUserData ();__bridge CCSprite*)body->GetUserData();
__ la parola chiave di ponte semplicemente significa che la lancetta è trasferita da o a terra Oggettiva-C immutata. L'ARCO né riterrà, né rilascerà quella lancetta.
Le parole chiave speciali __ bridge_transfer e __ bridge_retain devono solo esser usate affrontando gli oggetti di Fondazione Principali fatti un ponte esenti da pedaggio dove Lei dovrebbe normalmente chiamare CFRetain e/o CFRelease per dirigere la vita dell'oggetto di Fondazione Principale.
Fissaggio di NSAutoreleasePool con @autoreleasepool
L'ARCO sostituì la classe NSAutoreleasePool con la direttiva di compilatore @autoreleasepool.
Lei deve sostituire il codice usando NSAutoreleasePool:
//crei alcuni oggetti provvisori qui …
[metta il rilascio in insieme];
metta in insieme = lo zero;
Con la parola chiave @autoreleasepool:
{
//crei alcuni oggetti provvisori qui …
}
I metodi Lei non può chiamare (o annullare) più
Lei dovrà togliere tutte le telefonate di questi metodi senza sostituzione:
- ritenere
- retainCount
- rilascio
- autorilascio
- dealloc
Lei anche non può usare la parola chiave ritenere con proprietà più. Invece, usi la parola chiave forte.
Lei non può più annullare questi metodi nella Sua classe:
- ritenere
- retainCount
- rilascio
- autorilascio
Lei può ancora annullare - (il vuoto) dealloc {}
Lei non può chiamare dealloc ma Lei può ancora annullare - (il vuoto) dealloc {} il metodo. Questo è utile per rilasciare la memoria di C/C ++ gli oggetti. Ad esempio Lei ancora ha bisogno di essere capace di liberare la memoria di un caso mondiale Box2D. Allo stesso modo ci sono casi dove Lei ha bisogno di togliere stesso come il delegato di altra classe quando stesso la classe è deallocated. For example you still need to be able to free the memory of a Box2D world instance. Similarly there are instances where you need to remove self as the delegate of another class when the self class is deallocated.
C'è un'abitudine particolare che Lei ha bisogno di permettere vanno di. Poiché Lei non può chiamare dealloc, Lei anche non deve chiamare [dealloc fantastico]. Il compilatore genererà [dealloc fantastico] la telefonata dietro le quinte automaticamente. The compiler will generate the [super dealloc] call behind the scenes automatically.
Restrizione di nomina di proprietà
Lei non può creare una proprietà il cui nome comincia con "nuovo". Questo è tutto.
Nuove parole chiave di Proprietà:
forte e deboleLa parola chiave @property forte è sinonima per ritenere:
@property MyClass (forte) *myObject;myObject;
Considerando che debole è simile per assegnare, salvo che una proprietà debole sarà messa a zero automaticamente quando l'oggetto è deallocated (dunque: zeroing riferimento debole):
@property MyClass (debole) *myObject;myObject;
Zeroing i riferimenti deboli sono solo disponibili ponendo la SOLUZIONE INTEGRATA PER UFFICIO COME OBIETTIVO 5.0 e più nuovo, o Mac OS X Leone 10.7 e più nuovo.
L'ARCO vieta la sintetizzazione di una proprietà readonly senza aggettivo qualificativo di proprietà
Normalmente, quando Lei dichiara una proprietà readonly, non importa quello che il tipo d'immagazzinamento è (ritenga, assegni, la copia) da readonly le proprietà non può esser assegnato a. Prenda questo ad esempio:
Adesso con ARCO, se Lei non dichiara l'ivar manualmente (@synthesize può generare ivars) Lei si imbatterà in un errore strano sulla linea @synthesize, dichiarando:
errore: l'ARCO vieta la sintetizzazione di una proprietà di un oggetto Oggettivo-C con proprietà inspecificata o attributo d'immagazzinamento [4]
Così strano come può sembrare, in questo caso Lei dovrà specificare la parola chiave d'immagazzinamento su una proprietà readonly, aggiungendo forte o debole:
Questo specifica l'aggettivo qualificativo di proprietà dell'ivar attraverso la dichiarazione @property. L'alternativa dovrebbe dichiarare l'ivar manualmente, che forzerà la proprietà di usare lo stesso aggettivo qualificativo di proprietà che l'ivar.
Per esperti:
la rivelazione a compila volta se l'ARCO è permessoSe Lei ha bisogno di scoprire se il Suo codice è costruito con o senza ARCO, ad esempio se Lei è il progettista di una biblioteca pubblica, Lei può usare le macroistruzioni seguenti per determinare se l'ARCO è permesso a compilano il tempo.
#ifndef __ has_feature
Il #define __ has_feature (x) 0
#endif
#ifndef __ has_extension
Il #define __ has_extension __ has_feature//la Compatibilità con pre3.0 compilatori.
#endif
Il #if __ has_feature (objc_arc) && __ clang_major __> = 3
#define ARC_ENABLED 1
Il #endif//__ has_feature (objc_arc)
Per esperti:
permetta l'uso di parole chiave d'ARCO con invalidi d'ARCOCome un autore di biblioteca, una delle cose più cattive Lei poteva fare per garantire che la compatibilità all'indietro della Sua biblioteca è a #ifdef ogni parola chiave specifica per l'ARCO e scriva ogni tale linea due volte: una volta senza la parola chiave d'ARCO, una volta con la parola chiave d'ARCO.
#ifdef ARC_ENABLED
il void* pointerToSelf = (__ fanno un ponte su vuoto *) stesso; (__bridge void*)self;
#else
il void* pointerToSelf = (il vuoto *) stesso; (void*)self;
#endif//ARC_ENABLED
Invece mi propongo di semplicemente definire le parole chiave d'ARCO come “noop” le affermazioni quando l'ARCO è non disponibile. Così il Suo codice usando parole chiave d'ARCO ancora compilerà sotto Xcode 4.1 o LLVM GCC4.2, e Lei non ha bisogno a #ifdef di niente collegato a quelle parole chiave.
#if! definito (__ producono un suono metallico __) || __ clang_major __ <3
#ifndef __ ponte
#define __ ponte
#endif
#ifndef __ bridge_retained
#define __ bridge_retained
#endif
#ifndef __ bridge_transfer
#define __ bridge_transfer
#endif
#ifndef __ autoliberazione
#define __ autoliberazione
#endif
#ifndef __ forte
#define __ forte
#endif
#ifndef __ debole
#define __ debole
#endif
#ifndef __ unsafe_unretained
#define __ unsafe_unretained
#endif
Il #endif//__ clang_major __ <3
Adesso è al sicuro scrivere il codice come questo senza badare a se l'ARCO è disponibile o non, perché i compilatori che non sostengono l'ARCO solo vedranno il cliente abituale (il vuoto *) il lancio:
Mito:
l'ARCO non è stato provato attendibileCome se la direzione di memoria automatica abbia alcuna proprietà magica che ogni tanto va tutta matta.
L'ARCO ancora segue stesso alloc, ritenga, rilasci il ciclo di codice Oggettivo-C. Non ci sono nessun ambiguità e nessun caso speciale quando si tratta d'applicazione poco e le regole di alloc-retain-release semplici. Questo è completamente determinista e il compilatore può fare quel lavoro proprio, nessuno, meglio che Lei. Non c'è niente di per sé e potenzialmente su cui non si può contare su ARCO. This is entirely deterministic and the compiler can do that job just as well, no, better than you. There’s nothing inherently and potentially unreliable about ARC.
Se Lei ha sentito su problemi con ARCO, allora loro sono probabilmente collegati a situazioni dove un ARCO app connette con la Fondazione Principale o altro C/C ++ il codice. In quelle situazioni Lei dovrà correttamente applicare le varie nuove parole chiave (i lanci di ponte per la maggior parte). Faccia uno sbaglio là e Lei si mise un problema. Ma questo non è l'errore d'ARCO. Lo stesso va per ritengono cicli, che sono ancora una possibilità in ARCO apps. Make a mistake there and you got yourself a problem. But that’s not the fault of ARC. The same goes for retain cycles, which are still a possibility in ARC apps.
Anche ho scommesso la mia vita che la Mela non annuncerebbe, promoverebbe e attuerebbe l'ARCO per SOLUZIONE INTEGRATA PER UFFICIO e Mac OS X apps se non era stato provato stabile. Se questo non La convince, allora forse questa citazione del progettista d'ARCO CHRIS LATTNER fa:
L'ARCO è accuratamente costruito per essere un modello di programmazione attendibile che erra sulla parte di produrre un errore di compilatore invece silenziosamente produrre un problema di memoria nel corso dell'elaborazione.
Questo anche spiega un po' perché Lei vedrà più (iniziale) compilano errori con ARCO permesso.
Mito:
l'ARCO porta via il controllo su direzione di MemoriaAlcuni sostengono che l'ARCO porta via il Suo controllo su direzione di memoria. Questo a sua volta condurrebbe meno che svolgimento nel corso dell'elaborazione ottimale. D'ora innanzi l'ARCO è cattivo e deve esser evitato. Henceforth ARC is bad and should be avoided.
Lei poteva applicare lo stesso argomento senza punta a servosterzo. Ci sono alcuni conservatori che non avrebbero il servosterzo, soltanto a causa di alcuna sensazione soggettiva su controllo perdente. Ignori questa gente! Non perché loro sono sbagliati, loro sono corretti in alcune circostanze – è soltanto che quelle circostanze sono rare, molto specializzate e richiedono un alto livello d'abilità che il 99 % restante d'utenti semplicemente non ha, né vorrebbe allenarsi. Ignore these people! Not because they’re wrong, they are correct in some circumstances – it’s just that those circumstances are rare, very specialized and require a high level of skill that the remaining 99% of users simply don’t have, nor would want to exercise.
E anche se Lei proprio ha le abilità, Lei è ancora soggetto a errori di giudizio o altri errori umani. Allora perfino gli esperti trarranno vantaggio da usare l'ARCO (o il servosterzo per quanto riguarda ciò) in situazioni quotidiane.
Alcune persone che sostengono che l'ARCO porta via il controllo non sembrano di capire quello che l'ARCO fa. La direzione di memoria è sulla vita d'oggetti, se la direzione di memoria è automatizzata con ARCO o manuale. Se la vita di un oggetto è nella scena intera (la vista, il livello, app, eccetera) allora che l'oggetto è assegnato una volta quando la scena è inizializzata, e deallocated quando la scena è deallocated. Se Lei fa questo manualmente, o automaticamente, ha come conseguenza lo stesso comportamento dell'applicazione. If an object’s lifetime is throughout the entire scene (view, level, app, etc) then that object is allocated once when the scene is initialized, and deallocated when the scene is deallocated. Whether you do this manually, or automatically, results in the same behavior of the application.
Tutti hanno bisogno di capire che l'ARCO è determinista. Non deve esser preso per raccolta d'immondizie! I cicli di raccolta d'immondizie possono morire in qualsiasi momento casuale in tempo quando il netturbino lo trova necessario per libero su un po' di memoria. In ambiente riunito di delle immondizie, come C #, Lei proprio perde un po' di controllo su direzione di memoria e in alcune situazioni questo conduce a svolgimento nel corso dell'elaborazione malsicuro. Ma non con ARCO. Garbage collection cycles can kick in at any random moment in time when the garbage collector finds it necessary to free up some memory. In a garbage collected environment, such as C#, you do lose some control over memory management and in some situations this leads to unsteady runtime performance. But not with ARC.
Dire che l'ARCO toglie il controllo su direzione di memoria è soltanto chiaro sbagliato e probabilmente basato supponendo che l'ARCO è uguale a raccolta d'immondizie. Questo può anche derivare da “positives falso” che il Fragore che l'Analizzatore Statico produce, che può aver instillato il dubbio su tecnologie di Fragore "automatizzate" in generale, sebbene l'analisi statica e l'ARCO siano pezzi completamente separati di tecnologia.
La strada, in alcuni casi Lei avrebbe bisogno di esercitare il controllo su direzione di memoria e con ARCO Lei può ancora fare questo, di solito con le nuove parole chiave d'ARCO forti e deboli, così come fare un ponte su lanci per lancette che stanno attraversando confini da o a C/C ++ la terra. Finchè Lei è conscio della vita dei Suoi oggetti Lei non avrà nessun problema influenzando come la vita d'oggetti è diretta da ARCO.
L'ARCO sempre assegna e rilascia la memoria di un oggetto nello stesso punto in tempo nella stessa situazione (determinista). Così l'Obiettivo-C con ARCO non può essere rispetto a lingue riunite d'immondizie come C #. se Lei vede qualcuno confrontare l'ARCO con C #, per favore gli mandi questo collegamento.
Documentazione di Riferimento d'ARCO e articoli collegati
Più lontano leggendo per quelli che vogliono imparare più su ARCO in dettaglio.
- Fragore: documentazione di Contare di Riferimento Automatica
- Mela: Transitioning per FORMARE UN ARCO ELETTRICO Note di Rilascio
- Mela: Xcode Nuovo Manuale dell'utente di Caratteristiche: Contare di Riferimento Automatico Automatic Reference Counting
- Cenere di microfono: venerdì Q&A su Contare di Riferimento Automatico
- StackOverflow: Come lavora il contare di riferimento automatico?
- StackOverflow: Come sono i vantaggi e gli svantaggi di usare l'ARCO?
- StackOverflow: Com'è la differenza tra contare di riferimento automatico e raccolta d'immondizie?
- informIT: il Riferimento Automatico che Conta in Obiettivo-C, la Parte 1
- informIT: il Riferimento Automatico che Conta in Obiettivo-C, la Parte 2 I Dettagli
- Cenere di microfono: Zeroing i riferimenti deboli senza ARCO
- Github: il Sostegno di riferimenti deboli zeroing su SOLUZIONE INTEGRATA PER UFFICIO 4 / OS X 10.6
Per favore fatemi sapere se dimenticai di aggiungere qualcosa su ARCO! Particolarmente se Lei pensa che deve essere knowlARCdge comune. E non dimentichi di ricinguettare quest'articolo se Le piace questo, grazie! And don’t forget to retweet this article if you like it, thanks!
| Segua @gaminghorror | Segua @kobold2d |
|













Quando ho letto su sviluppo Mac si sente che andai anni 10/15 indietro in tempo.
Stavo cercando un riassunto come questo, grazie!!
Penso che questo chiarificherà molte idee su ARCO. Gran lavoro
Quale gran posto. grazie molto per questo. assomiglia a una buona cosa fare durante il fine settimana
looks like a good thing to do on the weekend
Una cosa che non sono stato capace di riuscire a capire già è come usare la spedizione con ARCO. Dettagli in questa domanda d'Eccedenza di Pila:
http://stackoverflow.com/q/7858980/8427
Terrificante, Steffen! Gran riassunto.
Avevo cercato l'informazione su lanci fatti un ponte e la documentazione Applicare non ha praticamente niente su questo. Quest'articolo e i riferimenti che Lei provvide aiutarono molto.
Grazie!
Andre
Che ‘Lei non possa creare una proprietà il cui nome comincia con "nuovo"’ pezzettino non è abbastanza true. Vedi: http://stackoverflow.com/q/6327448/557219http://stackoverflow.com/q/6327448/557219
Questo è in Transitioning di mela per FORMARE UN ARCO ELETTRICO Note di Rilascio:
Il collegamento che Lei provvide dà una soluzione di questo problema, ad esempio rinominando la proprietà da “newObject” a “theNewObject”.
Sì, ho detto alla Mela che la loro affermazione non è veramente true (ci sono almeno due altre inesattezze in quel documento).
La rinominazione della proprietà è una soluzione, ma ci sono due altre soluzioni in cui la proprietà non diventa rinominata: la rinominazione del metodo d'assorbitore, e la specificazione di una famiglia di metodo diversa per il metodo d'assorbitore. Queste due soluzioni permettono di usare una proprietà il cui nome comincia da nuovo. These two solutions allow using a property whose name starts with new.
“Ad esempio, LLVM 3.0 è adesso capace di scoprire alcun “assortimento potenziale fuori dai limiti” i problemi grazie al progetto di SAFECode”
Un progetto così simpatico come SAFECode è, che non è quello che sta riferendo dell'assortimento fuori dai limiti gli avvertimenti. Questo è soltanto un avvertimento di fragore ordinario, e fu prima commesso qui: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20110214/038831.htmlhttp://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20110214/038831.html
Provai a usare le Sue macroistruzioni “Che scoprono a compilano volta se l'ARCO è permesso”, ma mi sembra che questo non lavora in modo conveniente.
"sembra" e “non in modo conveniente” sono descrizioni terribilmente inaccurate di quello che sta avvenendo. Le macroistruzioni certamente lavorano, li uso in Kobold2D molto. Sia sicuro di definire le macroistruzioni in un file di testata e importare quella testata nei file di sorgente dove Lei sta usando le macroistruzioni. Be sure to define the macros in a header file and import that header in the source files where you’re using the macros.
[...] sentito su contare di riferimento automatico Oggettivo-C (l'ARCO). E Lei ha letto su questo qui e là e ogni dove. Ma Lei non sta usando [...] But you’re not using [...]