2010-06-23 6 views
3
 
- (id)methodThatReturnsSomething 
{ 
    @synchronized(self) { 
     return nil; 
    } 
} 

Quand je fais cela sur Xcode, il me renvoie un avertissement: « Contrôle atteint la fin de la fonction non vide »retour Synchronisé objectif-c

est-il un problème avec ce code?

Répondre

0

Je ne comprends pas ce que vous voulez faire dans votre code, mais

- (id)methodThatReturnsSomething 
{ 
    @synchronized(self) { 
    } 
    return nil; 
} 

devraient avoir le même effet (remettre à plus tard le retour jusqu'à ce que le verrou associé à self est libéré), sans l'avertissement du compilateur.

Mais: que vouliez-vous faire? Vous n'avez pas à mettre un @synchronized de cette manière.

+0

Cette synchronisation risque d'être complètement supprimée par l'optimiseur, ce qui ne devrait évidemment pas faire de différence - comme vous le dites, "qu'est-ce que le problème voulait résoudre"? –

1

La synchronisation dans le code comme affiché est redondant, mais il n'y a pas de problème avec lui en tant que tel:
@synchronized blocs sont soit terminé normalement ou par des exceptions. Comme vous avez déjà une instruction return, une autre instruction après le bloc n'est pas nécessaire.

+0

Le code, tel qu'il est affiché, est parfaitement significatif. Cela provoque juste un verrouillage inutile à prendre. – bbum

+0

@bbum: C'est vrai, c'est ce que je voulais dire. –

11

Il supprime un avertissement de compilateur en raison d'un bogue dans certaines versions du compilateur qui sont corrigés dans d'autres versions/versions ultérieures du compilateur.

Dans ce cas, oui, vous avez vraiment trébuché sur un bogue du compilateur.

Questions connexes