Les blocs ne sont pas représentés comme des pointeurs de fonction. Ils sont représentés comme des blocs, et cela est indiqué par l' ^
symbole dans leur déclaration. Sous le capot, la seule ressemblance est la syntaxe d'appel. Sinon, ils sont tous les deux très, très différents.
Il est souvent utile d'appeler des méthodes sur eux. Par exemple, si vous n'utilisez pas de collecte des ordures, vous devez appeler l' copy
méthode sur des blocs si vous voulez les garder pour plus tard. Avec l'avènement de l'automatique conserver le comte, c'est même la seule façon de copier un bloc, depuis l'ARC de pointeur de la fonte des règles de vous empêcher d'utiliser l' Block_copy
macro.
NULL
"est, selon le compilateur, soit juste 0
ou (void*)0
. Ce serait travailler pour n'importe quel type de pointeur. Toutefois, en raison des règles de la langue de l'Objective-C, vous obtiendrez un message d'avertissement si vous essayez d'envoyer un message à un type qui ne peut pas exprimés directement à l' id
(et une erreur si vous utilisez l'ARC). nil
être (id)0
, c'est le mot clé préféré pour représenter un (l'absence de) de l'objet.
Puisqu'il peut être utile pour envoyer des messages à des blocs, vous devez utiliser nil
pour eux.