2010-09-16 13 views

risposta

4

, per la parte più grande. I blocchi sono tipo- C funzioni trattate tipo-di come oggetti che possono acquisire variabili dall'ambito circostante. Le funzioni anonime sono equivalenti ai blocchi, ma certamente non identiche a causa del complicato meccanismo dei blocchi dietro le quinte.

Ad esempio, se si intende utilizzare un blocco dopo/fuori dalla funzione/metodo che definisce il blocco non è più attivo, è il caso se si imposta il blocco come proprietà da qualche parte o si utilizza in GCD (un multi -core libreria di accodamento operazione), è necessario copiarlo con Block_copy() (o [aBlock copy]). Non entrerò nei dettagli, ma questo non è certo qualcosa che fai con le funzioni JS (anonime). Ha a che fare con il fatto che i blocchi letterali sono allocati nello stack (e non da qualche parte nel codice) ed è necessario copiarli nell'heap se si desidera che persistano.

Può diventare piuttosto complicato (ma piuttosto bello nel suo design), ma per la maggior parte dei casi d'uso è piuttosto semplice e puoi trattarlo come funzioni JS anonime. ;-)

3

Sì. I blocchi in Objective-C sono chiusure.

Problemi correlati