查看@synthesize为getter/setter生成的代码

cfi*_*her 5 cocoa code-generation objective-c

是否可以查看@synthesize生成的确切代码?

Dav*_*ong 5

当然是啦.转到您拥有@synthesized该属性的.m文件,然后从"生成"菜单中选择"显示汇编代码".编译器方便地输入如下内容:

    .align  4, 0x90
"-[Foo setStr:]":
Leh_func_begin2:
Lfunc_begin2:
....
Run Code Online (Sandbox Code Playgroud)

    .align  4, 0x90
"-[Foo answer]":
Leh_func_begin3:
Lfunc_begin3:
....
Run Code Online (Sandbox Code Playgroud)

哦,你想要Objective-C代码?对不起,这是由编译器完成的,编译器读取 Objective-C,但是在Assembly中写入.


Mat*_*her 5

您可以阅读Clang编译器源以查看生成getter和setter方法的C++代码:

http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp

它非常神秘,但这是查看生成代码的最准确方式.

您还可以查看Apple的运行时实现中的objc_getProperty和objc_setProperty 实现.虽然与生成的代码字面意义不同,但此代码更易于阅读,并清楚地表明了正确的getter和setter应该做什么.