setFrame: 汇编参数

测试代码 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中。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容