是什么? 为了自动生成属性及属性的声明和实现的关键字! 有什么用? 自动生成属性及属性的声明和实现 (自动封装get,set方法,不必手敲没有技术含量的代码) 怎么用? - @interface Animal : NSObject
- @property NSString *eyes;//眼睛
- @property int legs;//退
- @end
复制代码什么时候用? 需要自动声明属性和实现方法的时候用!
用的时候需要注意什么? 1,如果自定义了属性,属性不会生成! 2,如果自定义了get和set方法,则对应的get和set方法不会自动生成!
3,如果get和set方法都是自己实现得,则@property,则不会干任何事情!
4,自动生成的属性,默认都是@private权限. - Person.h
- #import <Foundation/Foundation.h>
- @interface Person : NSObject{
- //如果有NSString *_name; @property NSString *name;会做什么?
- //创建get,set的方法和实现!
- //NSString *_name;
- }
- @property NSString *name;
- @end
- Person.m
- //@synthesize 在Xcode4.4之前用于跟property配合使用的.用来生成一个属性的set与get实现.
- //@synthesize name=_name;
- //等效于下面set与get实现:
- //#pragma mark - name的set方法
- //-(void)setName:(NSString *)name{
- // _name=name;
- //
- //}
- //#pragma mark name的get方法
- //-(NSString *)name{
- // return _name;
- //}
- #import "Person.h"
- @implementation Person
- //如果有了set方法,@property NSString *name;会做什么呢?
- //@property 不会创建setName
- //@property 会创建getName方法和实现!
- -(void)setName:(NSString *)name{
- NSLog(@"哈哈");
- _name =name;
- }
- //如果手动创建的标准格式的set与get方法,则property不会再自动生成.
- //是说,如果自己手动实现了标准的set或get方法,那么property不会在自动生成set或get方法!
- //如果,属性的set和get方法的实现全部手动按标准格式生成,则这个属性不再会自动创建.
- //是说get和set都实现了,@property则不起作用!(只有一个实现了,@property会声明变量,且实现另一个方法)
- //包括声明,成员变量name.NSString *name;
- //-(NSString *)name{
- // NSLog(@"获取值!");
- // return _name;
- //}
- //name属性=_name实例变量合成访问器方法(get,set)
- //@synthesize name = _name;
- @end
- main.m
- /*
- @property的用法
- 作用:能够自动生成属性及属性的set与get声名和实现.
- @property NSString *name;(不用加_线,因为编译器在自动创建属性的时候自动帮你加了)
- 等效于:
- 1.检测有没有一个 NSString *_name;如果没有自动创建:自动生成的属性是
- @private权限
- {
- NSString *_name;
- }
- 2.检测有没有给_name设计get与set声名.如是没有,按标准形式自动生成:
- -(void)setName:(NSString *)name;
- -(NSString *)name;
- 3.检测有没有给_name的set与get声名做实现.如果没有,则按标准形式自动生成:
- -(void)setName:(NSString *)name{
- _name=name;
-
- }
- -(NSString *)name{
- return _name;
- }
-
- 注意:
- 1.如果手动创建的标准格式的set与get方法,则property不会再自动生成.
- 2.如果,属性的set与get方法的实现全部手动按标准格式生成,则这个属性不再会自动创建.
- 3.自动生成的属性的默认是@private权限的.如果要改变则要手动生在属性加上权限
- */
- #import <Foundation/Foundation.h>
- #import "Person.h"
- int main(int argc, const char * argv[]) {
- Person *pr = [Person new];
- pr.name = @"huh2";
- NSLog(@"姓名:%@",pr.name);
- return 0;
- }
|