Pregunta

Quiero saber cómo objetivo argumentos mango tiempo de ejecución C cuando llamo a un método objetivo como C

[NSString stringWithFomat:@"%@, %@", @"Hello", @"World"]

Hay tres argumentos para esta llamada C objetivo, ¿cómo funciona en comparación con forma típica en un sistema de brazos. He conocido registro r0, r1, r2, r3 sostendrá primera 4 argumentos, ¿qué hay argumentos adicionales? ¿Cómo se las puso en una pila y hacerlas explotar más adelante?

¿Fue útil?

Solución

Para las funciones que devuelve un tipo simple:

r0 = self (NSString)
r1 = _cmd (@selector(stringWithFormat:))
r2 = 1st argument (@"%@, %@")
r3 = 2nd argument (@"Hello")

entonces el resto se coloca en la pila:

[sp,#0] = 3rd argument (@"World")
[sp,#4] = 4th argument (does not exist in your example)
...

Por supuesto, "argumento" significa aquí un objeto de 4 bytes. Si el argumento es> 4 bytes entonces será dividir a cabo, por ejemplo.

-[UIView initWithFrame:rect];

r0 = self
r1 = _cmd
r2 = rect.origin.x
r3 = rect.origin.y
[sp,#0] = rect.size.width
[sp,#4] = rect.size.height

El valor devuelto (hasta 16 bytes) se colocará en r0, r1, r2, r3.


Para las funciones que devuelve una estructura:. r0 se utiliza para almacenar el puntero del valor de retorno

NSRange retval = [self rangeOfString:string options:options range:range]

r0 = &retval (of type NSRange*)
r1 = self
r2 = _cmd (@selector(rangeOfString:options:range:))
r3 = string
[sp,#0] = options
[sp,#4] = range.location
[sp,#8] = range.length
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top