黑马程序员技术交流社区
标题:
关于property的作用
[打印本页]
作者:
jiangenhao
时间:
2014-5-9 11:38
标题:
关于property的作用
本帖最后由 jiangenhao 于 2014-5-10 16:38 编辑
主函数如下
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Person *p = [Person new];
id d =[Person new];
[d setAge:10];
// NSObject *o = [Person new];
// id == NSObject *
NSLog(@"%d",[d age]);
return 0;
}
复制代码
.h文件如下:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end
复制代码
.m文件如下:
#import "Person.h"
@implementation Person
@end
复制代码
问题:property只是对getAge和age方法做了声明,并没有实现,为什么我在主函数中可以调用getAge和age方法?
作者:
agelessman
时间:
2014-5-9 11:43
后边的版本就是这样的,自动生成代码
作者:
兰闻天
时间:
2014-5-9 12:01
老师的视频里说了,编译器特性:
若只手动实现了setter,编译器会自动生成getter和不存在的成员变量;
若只手动实现了getter,编译器会自动生成setter和不存在的成员变量;
若同时实现了setter和getter,编译器就不会自动生成不存在的成员变量。
作者:
jiangenhao
时间:
2014-5-9 12:19
我什么方法都没有实现 我的get set方法从哪里来的呢
作者:
sabjiang
时间:
2014-5-9 12:38
有一个东东叫做编译器
就拿C语言来说,我们写的一些代码都是有着编码格式的文本文件。可程序最终被操作系统运行,操作系统只认识二进制的0和1,所以从我们编写的代码文件到生成机器可以运行的可执行文件之间需要一层包装转换,这就是编译器干的事情
编译器本身也是一个可执行项目,它里面会对你写的代码进行语法检查,更重要的是它内部定义了一些特性,当你的代码符合它定义的特性的时候就会进行一些替换和自动生成的工作。@property就是Xcode里面定义的一个特性,当Xcode编译器看到这个家伙的时候,会自动生成关于这个属性的getter和setter方法,其实也只是很刻板的自动增加一个_属性名称的这么一个私有变量
编译器做完这一切就会将这份自动生成的新代码就行编译,编译成二进制格式的目标文件,然后做一步链接操作,所有的目标文件和调用系统的一些个框架文件链接在一起才能生成最终的可执行文件
在.net里,编译器也提供了很多语法特定,极大的简化了程序员的编码量。.net平台是托管的,所以使用的C#语言需要先被编译成中间代码,这些代码可以使用reflector这类反编译工具看的清清楚楚
作者:
詹绪长
时间:
2014-5-9 12:49
Xcode 自己会的
作者:
jiangenhao
时间:
2014-5-9 19:21
我还是没明白
声明是property做的事
实现get set方法是synthesize做的事
我没有写synthesize 为什么会有get set方法?
作者:
2的狠正经
时间:
2014-5-10 14:57
synthesize 是X code5.0 以前的。 X code5.0后苹果公司把synthesize的功能合并到了property 里面,
所以当你 用property的时候, 声明实现是一起来!
作者:
jiangenhao
时间:
2014-5-10 16:37
楼上正解,刚看到快速入门视频里有
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2