Secondo il clang documentation, un metodo che restituisce id
è implicitamente noto per tornare instancetype
quando si tratta di un metodo di classe che inizia con new
o alloc
, o un metodo di istanza che inizia con retain
, autorelease
, init
o self
.Dovrebbe essere usato instancetype sui metodi alloc/new/init?
Per motivi di coerenza, questi metodi devono essere scritti anche per restituire esplicitamente instancetype
nel nuovo codice?
- (instancetype)init {
self = [super init];
if (self) {
// perform initialization
}
return self;
}
C'è qualche documentazione sul perché o perché no o su un qualsiasi ragionamento? Sembra che in questo caso sia interpretato esattamente allo stesso modo del compilatore.
Il valore predefinito è "id", non instancetype. Restituendo instancetype ti dà più controllo di tipo. Non c'è differenza se il tuo codice è corretto, ma il compilatore potrebbe perdere gli errori se restituisci id. – gnasher729
@ gnasher729 Vedere la documentazione di instancetype in llvm (http://clang.llvm.org/docs/LanguageExtensions.html). 'instancetype' viene automaticamente dedotto per determinati metodi e, di conseguenza,' instancetype' è il valore predefinito in questi casi. – bbum