测试代码 1:
void test(CGRect rect)
{
printf("%f", rect.origin.x);
printf("%f", rect.origin.y);
printf("%f", rect.size.width);
printf("%f", rect.size.height);
}
int main(int argc, char * argv[]) {
@autoreleasepool {
test((CGRect){1.1,2.1,3.1,4.1});
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
反汇编看一下
1很明显,CGRect的4个值放在d0、d1、d2、d3中。
测试代码 2
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self testFrame:(CGRect){1.1,2.1,3.1,4.1}];
}
- (void)testFrame:(CGRect)rect
{
printf("%f", rect.origin.x);
printf("%f", rect.origin.y);
printf("%f", rect.size.width);
printf("%f", rect.size.height);
}
@end
测试OC的方法,看有没有什么区别
2
OC的方法本质上和C调用方式没有区别,只是rect参数从参数1变成了参数3(前两个参数分别是self和SEL)。可以看到,CGRect的4个值还是放在d0、d1、d2、d3中。
网友评论