对于返回简单类型的函数:
r0 = self (NSString)
r1 = _cmd (@selector(stringWithFormat:))
r2 = 1st argument (@"%@, %@")
r3 = 2nd argument (@"Hello")
然后将其余的放在堆栈上:
[sp,#0] = 3rd argument (@"World")
[sp,#4] = 4th argument (does not exist in your example)
...
当然,这里的“参数”是指一个 4 字节的对象。如果参数有 >4 个字节,那么它将被拆分,例如
-[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
返回的值(最多 16 个字节)将放在 r0, r1, r2, r3 中。
对于返回结构体的函数:r0 用于存储返回值的指针。
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