@property关键字和@synthesize关键字
(一),@property用法: 1,@property是编译器的指令; 2,@property的语法: @property int age; (这句话的意思,就是帮我们生成age 的get和set方法的声明)(xcode4.4以前) -(void)setAge:(int)age; -(int)age; 3,@property只能写在@interface @end中。 4,xcode4.4以后property做了增强 不但帮助我们自动生成get/set方法的声明还帮助我们自动生成get/set方法的实现 。 5,告诉编译器,要生成的get/set方法声明的成员变量类型是int 。 6,如果没有手动声明成员变量,perperty会在.m文件中自动帮我们生成一个开头的成员变量 (二),@synthesize用法: 1. @synthesize age; 1),生成一个age的私有实例变量; 2),生成实例变量的get和set方法的实现
2. @synthesize 给指定的实例变量赋值。 @synthesize age = _age;
注意; 如果是@synthesize的话, 变量名要先在.h文件中声明。 @property,@synthesize这两个可以配合使用,用于简化set和get方法的定义和实现。
(三),xcode4.4之后 @property的增强用法: @property int age;这句话干了三件事:
1,在.h文件中生成age的get和set方法的声明; @interface Person : NSObject -(void)setAge:(int)age; -(int)age; @end
2,在.m文件中生成_age的私有实例变量;(前提是,没有在.h文件中手动声明_age变量) @implementation Person{ int _age;//不能被子类继承 }
@end
3,在.m文件中生成age的get和set方法的实现; @implementation Person{ int _age; } -(void)setAge:(int)age{ _age = age; } -(int)age{ return _age; } @end
(四),在增强@property下,重写setter和getter方法: 在使用@property情况下,可以重写getter和setter方法.需要注意的是,当把setter和getter方法都实现了之后,实例变量也需要手动去写.
|