No, no hay diferencia. Con la palabra clave const
, hay varias cosas que podría aplicar en una declaración; podría aplicarse al puntero, o podría aplicarse al valor al que se apunta.
Los calificadores de propiedad solo tienen sentido en los punteros a los objetos. El objeto en sí no puede ser "fuerte" o "débil"; es el puntero del objeto que es fuerte o débil. El ARC solo tiene sentido cuando se aplica directamente a los tipos de puntero a objeto, y afecta cómo la vida útil del puntero afectará la duración del objeto.
Dado que nunca hay ninguna ambigüedad sobre a qué se podría aplicar el calificador de propiedad, la especificación ARC permite la colocación del calificador de propiedad en cualquier lugar de la definición del apuntador a objeto. Ambos ejemplos son igualmente válidos. Del mismo modo, todos los siguientes significan lo mismo:
NSError * __autoreleasing * someObject;
NSError __autoreleasing ** someObject;
__autoreleasing NSError ** someObject;
Tenga en cuenta que el compilador se queja de éste, sin embargo:
NSError ** __autoreleasing someObject;
Esto se debe a que se ha movido más allá de la definición de la Puntero- al objeto. Podría analizar ese como (NSError *)* __autoreleasing someObject;
. Cuando llega al segundo *
, ya ha definido el tipo del puntero, por lo que __autoreleasing
no tiene ningún sentido. En cualquier lugar dentro de la definición del tipo de puntero está bien, pero una vez que se pasa al tipo puntero-a-puntero, entonces se está refiriendo a otra cosa, y ya no tiene sentido.