forme canonique : echec de init

cyranocyrano Membre
bonjour,

apres avoir passé le controle

self = [super init]
if (self)
{
    ...

quel est la forme canonique de l'echec d'initialisation?

merci

ps: j'ai cru lire (mais ou) que [super init] est inutile si on hérite directement de NSOBject, j'ai revé?

Réponses

  • zoczoc Membre
    06:06 modifié #2
    dans 1289127750:

    quel est la forme canonique de l'echec d'initialisation?

    Tout simplement "return nil".

    ps: j'ai cru lire (mais ou) que [super init] est inutile si on hérite directement de NSOBject, j'ai revé?

    A partir du moment où, pour l'instant (que ce soit sur iOS ou MacOS X), l'implémentation du message init par NSObject ne fait rien d'autre que "return self", oui, c'est inutile. Mais le faire quand même permet de garantir une compatibilité du code si un jour cet état de fait change...
  • mpergandmpergand Membre
    novembre 2010 modifié #3
    En cas d'erreur lors de l'initialisation, il faut faire un release:
    - (id)initWithValue:(int) value<br />{<br />	if(self=[super init)<br />		{<br />		if(value&gt;100)<br />			{<br />			// valeur incorrecte<br />			[self release];<br />			return nil;<br />			}<br />		}<br />	<br />	return self;<br />}
    



    On peut aussi lancer une exception.
    if(value&gt;100)<br />	{<br />	// valeur incorrecte<br />	[self release];<br />	[[NSException exceptionWithName:@&quot;Nom&quot; reason:@&quot;raison&quot; userInfo:nil] raise];<br />	}
    
  • zoczoc Membre
    06:06 modifié #4
    Ouais, effectivement, j'ai un peu oublié le release  >:)
  • cyranocyrano Membre
    06:06 modifié #5
    dans 1289129771:

    En cas d'erreur lors de l'initialisation, il faut faire un release:
    - (id)initWithValue:(int) value<br />{<br />	if(self=[super init)<br />		{<br />		if(value&gt;100)<br />			{<br />			// valeur incorrecte<br />			[self release];<br />			return nil;<br />			}<br />		}<br />	<br />	return self;<br />}
    


    ok, j'ecrivais cela, c'etait pour confirmer  :)


    On peut aussi lancer une exception.
    if(value&gt;100)<br />	{<br />	// valeur incorrecte<br />	[self release];<br />	[[NSException exceptionWithName:@&quot;Nom&quot; reason:@&quot;raison&quot; userInfo:nil] raise];<br />	}
    



    encore mieux

    merci
Connectez-vous ou Inscrivez-vous pour répondre.