• Come tutte le variabili locali, un blocco non statica esiste nello stack e sarà spuntato dallo stack, come qualsiasi altra variabile locale che non è stata dichiarata statica.
• Block_copy() copia il blocco dallo stack sull'heap, in cui sono presenti tutte le istanze di malloc. E come tutti i metodi new/copy, Block_copy() restituisce un oggetto allocato dell'heap con un conteggio dei ritardi di 1. Un blocco è un oggetto objectiveC ma non è conforme come un oggetto normale. Pertanto, non dovrebbe esserci differenza tra Block_Release() e il metodo di rilascio obiettivo.
• Questo esempio utilizza il metodo di copia di un'istanza di blocco. Perché assegnare il risultato di un Block_copy() a un ID richiede un cast di tipo che non voglio sbagliare. Il metodo di copia consente di assegnare direttamente la variabile di blocco a un ID.
- (void) setupStoredBlock
{
int zStackLocalVariable = 42;
iHeapAllocatedVariable = [^int(int aMore){ return zStackLocalVariable + aMore; } copy];
}
• Per dichiarare un oggetto statico è quello di richiedere di essere fisicamente allocato con il codice stesso. Un blocco dichiarato statico impedisce al compilatore di accedere a variabili esterne al proprio ambito. A causa dei requisiti di una dichiarazione di blocco statico, suppongo che il blocco sullo stack sia in qualche modo diverso dal blocco che si trova nell'heap.
• Un blocco è un oggetto obiettivo c la cui classe il cui nome classe e altre informazioni associate non ho ancora tentato di recuperare, ma, come Protocollo, Oggetto e altre classi hiddenCove nascoste, non è conforme a NSObject. Come tutti gli oggetti objectiveC, tuttavia, deve essere conforme al mantenimento/rilascio. ARC estende anche le equivalenze di mantenimento/rilascio negli oggetti di Core Foundation, e probabilmente, se non ora, alla fine, in allocazioni malloc/free.
• Attendo la vera motivazione per un'esplorazione approfondita di mikeash.com, poiché a Apple piace tenerci tutti su un piano iper-teorico di scarso significato fisico, anche se tutto ciò che è significativo è fisico.
ARC and blocks also discussed here
ho potuto riprodurre questo in un'applicazione di test: https://bitbucket.org/boredzo/block-retention-test/ –