No, non c'è differenza. Con la parola chiave const
, ci sono più cose a cui si può applicare in una dichiarazione; potrebbe essere applicato al puntatore o potrebbe essere applicato al valore puntato.
I qualificatori di proprietà hanno senso solo per i puntatori agli oggetti. L'oggetto stesso non può essere "forte" o "debole"; è il puntatore all'oggetto che è forte o debole. ARC ha senso solo se applicato direttamente ai tipi di puntatore a oggetto e influenza il modo in cui la durata del puntatore influisce sulla durata dell'oggetto.
Dato che non vi è mai alcuna ambiguità su ciò a cui il qualificatore di proprietà potrebbe applicare, la specifica ARC consente il posizionamento del qualificatore di proprietà in qualsiasi punto della definizione del puntatore all'oggetto. Entrambi i tuoi esempi sono ugualmente validi. Allo stesso modo, tutti i seguenti significano la stessa cosa:
NSError * __autoreleasing * someObject;
NSError __autoreleasing ** someObject;
__autoreleasing NSError ** someObject;
Si noti che il compilatore si lamenta di questo, però:
NSError ** __autoreleasing someObject;
Questo perché hai spostato al di là della definizione del pointer- obiettare. Potresti analizzarlo come (NSError *)* __autoreleasing someObject;
. Quando arrivi al secondo *
, hai già definito il tipo di puntatore, quindi __autoreleasing
non ha alcun senso. Ovunque all'interno della definizione del tipo di puntatore va bene, ma una volta che si passa al tipo puntatore-puntatore, allora ci si riferisce a qualcos'altro, e non ha più senso.
fonte
2012-01-18 17:41:21