A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huh 中级黑马   /  2015-12-8 23:20  /  571 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是什么?

    为了自动生成属性及属性的声明和实现的关键字!

有什么用?

    自动生成属性及属性的声明和实现

     (自动封装get,set方法,不必手敲没有技术含量的代码)

怎么用?

  1. @interface Animal : NSObject
  2. @property  NSString *eyes;//眼睛
  3. @property int legs;//退
  4. @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;
  • }

评分

参与人数 2黑马币 +12 收起 理由
zhaoxincheng_ + 6 神马都是浮云
wang22290 + 6 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马