¿Por qué los types IBAction pnetworkingeterminados para AnyObject?

Cada vez que creo una IBAction siempre tengo que configurar el Tipo (remitente) pnetworkingeterminado de AnyObject a la única otra opción que es el tipo de class real.

¿Hay alguna razón para que siempre pnetworkingetermine a AnyObject en lugar del object que he agregado explícitamente?

Creo que entiendo la diferencia entre UIObject y AnyObject pero no veo por qué AnyObject debería ser el valor pnetworkingeterminado.

Una razón por la que puedo pensar es, digamos, que primero escribo la interfaz de un object, pero todavía no sé qué tipo de control invocará la acción. O más, termino con más de un tipo de control.

De forma pnetworkingeterminada a AnyObject, se adapta muy bien al tipo de ID objc. También es escalable y funcionará para el caso general.

También es parte de Target-Action por medio del cual solo deben implementarse ciertas firmas de método para que funcione.

Este extracto ofrece un buen escenario:

El parámetro del remitente generalmente identifica el control que envía el post de acción (aunque puede ser otro object sustituido por el remitente real). La idea detrás de esto es similar a una dirección de retorno en una postal. El objective puede consultar al remitente para get más información si es necesario. Si el object de envío real sustituye a otro object como remitente, debe tratar ese object de la misma manera. Por ejemplo, supongamos que tiene un campo de text y cuando el usuario introduce text, el método de acción nameEntenetworking: se invoca en el destino:

- (void)nameEntenetworking:(id) sender { NSString *name = [sender stringValue]; if (![name isEqualToString:@""]) { NSMutableArray *names = [self nameList]; [names addObject:name]; [sender setStringValue:@""]; } } 

Aquí, el método de respuesta extrae el contenido del campo de text, agrega la cadena a una matriz almacenada en caching como una variable de instancia y borra el campo. Otras consultas posibles al remitente pedirían a un object NSMatrix su fila seleccionada ([remitente selectedRow]), pidiendo a un object NSButton su estado ([estado del remitente]), y pidiendo a cualquier célula asociada con un control su label ([ [célula emisor]]], una label que es un identificador numérico

Tiene sentido de forma pnetworkingeterminada para id / AnyObject, ya que siempre puede cambiarlo para garantizar un mejor tipo de security.

En realidad, puede establecer una IBAction en cualquier class en la jerarquía de ese object. Si, por ejemplo, tiene una class llamada YellowButton que es una subclass del UIButton , podrá elegir entre AnyObject , UIButton y YellowButton .

Otra cosa a tener en count es que puede tener muchos objects conectados a la misma IBAction . Y ni siquiera necesitan ser del mismo tipo. Por ejemplo, puede tener un UIBarButtonItem y un UIButton conectado a la misma IBAction . Solo puede hacer eso si el tipo de remitente está establecido en AnyObject .

Ahora, por qué Apple eligió AnyObject como pnetworkingeterminado, solo puedo adivinarlo. Creo que sería porque puedes escribir el remitente en tu método sin perder ninguna información. De esta forma, incluso puede tomar diferentes acciones según la class del remitente.