La diferencia entre id y tipo de instancia en iOS

Tipos de devolución asociados y tipos de devolución no asociados

  • Tipo de devolución de relevancia

De acuerdo con las reglas de nomenclatura de Cocoa, los métodos que cumplen con las siguientes reglas:
(1) En los métodos de clase, comenzando con alloc o new
(2) En los métodos de instancia, comenzando con autorelease, init, retain o self
devolverán un objeto del tipo de clase donde se encuentra el método. , estos métodos se denominan métodos con tipos de retorno asociados. En otras palabras, el resultado devuelto por estos métodos es del tipo de la clase en la que se encuentra el método.

Por ejemplo:

@interface NSObject  
+ (id)alloc;  
- (id)init;  
@end

[NSArray alloc] y [[NSArray alloc]init] devuelven objetos NSArray.

  • Tipo de retorno no asociativo
@interface NSArray  
+ (id)constructAnArray;  
@end


[NSArray constructAnArray];

Según la convención de nomenclatura de métodos de Cocoa, el tipo de retorno obtenido es el mismo que el tipo de retorno declarado por el método, que es id.

Pero si usa el tipo de instancia como tipo de retorno, de la siguiente manera:

@interface NSArray  
+ (instancetype)constructAnArray;  
@end
/

[NSArray constructAnArray];

En este momento, el tipo de retorno es el mismo que el tipo de método.

¡La función de tipo de instancia es hacer que los métodos con tipos de retorno no asociados devuelvan el tipo de la clase en la que se encuentran!

La diferencia entre los dos

  • El ID no puede determinar el verdadero tipo de objeto durante la compilación.

    El tipo de instancia puede determinar el verdadero tipo de un objeto durante la compilación.

  • Si el valor de retorno del método init es tipo de instancia, asignar el valor de retorno a otro objeto genera una advertencia.

    Si en el pasado, el valor de retorno de init era id, entonces no se informaría ningún error si la dirección del objeto devuelta por init se asignara a otros objetos.

  • El ID se puede utilizar como variable definida, como valor de retorno o como parámetro formal. Pero el tipo de instancia solo se puede utilizar como valor de retorno.

Supongo que te gusta

Origin blog.csdn.net/weixin_42357849/article/details/122602601
Recomendado
Clasificación