- (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?
- (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?
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.
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.
Le code, tel qu'il est affiché, est parfaitement significatif. Cela provoque juste un verrouillage inutile à prendre. – bbum
@bbum: C'est vrai, c'est ce que je voulais dire. –
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.
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"? –