• property、synthesize、id



    1、@property int age;
    在编译器情况下会自动编译展开为:
    <age在setter中首字母大写,点语法为p.age>
    - (void)setAge:(int)age;
    - (int)age;
     
    2、同理:@property int _age;
    在编译器情况下会自动编译展开为:
    <_age在setter中首字母大写,为横线,大写仍保持,此时点语法为p._age>
    - (void)set_age:(int)age;
    - (int)_age;
    一般情况,使用1,而不使用2.

    @synthesize age = _age;
    会访问_age这个成员变量,如果_age成员变量不存在,系统就会自动生成@private类型的_age的成员变量,并自动生成age的setter与getter

    在4.5版本之后,可以省略@synthesize,此时,
    @property int age;有三个作用
    1、生成setter与getter的声明
    2、生成_age的成员变量
    3、生成setter与getter的实现

    //注意:必须在非ARC下,在“项目——》building setting——》all——》objcet-C Automic Reference Counting
    //@property(nonatomic,retain) NSString *name相当于:
    - (void)setName:(NSString *)name
    {
        if (_name != name)
        {
            [_name release];
            _name = [name retain
    ];
        }
    }
    否则,无法操作 [_name release];
            _name = [name retain
    ];

    // @property:可以自动生成某个成员变量的setter和getter声明
    @property int age;
    //- (void)setAge:(int)age;
    //- (int)age;


    @property int height;
    //- (void)setHeight:(int)height;
    //- (int)height;


    可以简写为:@property int age, height;
     
    注意:生成的是age、height而不是_age、_height成员变量
     
     
    语义设置(assign、retain、copy) 
    基本数据类型用assign;NSString用copy、(retain也可以使用);非NSString对象用过retain
     
    例:
    @property(nonatomic,assign)int age;
    @property(nonatomic,copy)NSString *name;
    @property(nonatomic,retain)NSString *number;
    @property(nonatomic,retain)NSArray *group;

    @synthesize age = _age;
    // @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量,4.4后自动生成。
     
    #import <Foundation/Foundation.h>
    @interface Car : NSObject
    {
        //int _speed;
        //int _wheels;
    }
    @property int speed;
    @property int
     wheels;

    //@property int speed, wheels;
    - (void)test;
    @end
     
    #import "Car.h"

    @implementation Car
    //@synthesize speed = _speed, wheels = _wheels;
    // 注意会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量
    @synthesize speed = _speed;
    @synthesize wheels = _wheels
    ;


    - (void)test
    {
        NSLog(@"速度=%d", _speed);
    }


    @end
     
    同理:
    @synthesize age;
    // 默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量

    @property int age;
    如果.m中有setter或getter,系统会生成成员变量以及getter或setter。若既存在setter又存在getter,则不再会产生getter、setter以及成员变量,因为成员变量是为setter与getter服务的。此时(三无),@synthesize age = _age;无法省略。
    id等价于NSObject*,万能指针,能指向或操作任何OC对象
  • 相关阅读:
    How to Compile Java DBus
    BZOJ 2783 JLOI 2012 树 乘+二分法
    Robotium原则的实施源代码分析
    基本的负载均衡算法
    人大、上财、复旦、上交四校2013年应届金融硕士就业去向
    2014届上财金融硕士就业情况
    三跨),总分420+
    复旦金融专硕和上财金融专硕
    一个三跨考生三战上海财经大学金融硕士的考研经验
    董某某
  • 原文地址:https://www.cnblogs.com/Alling/p/3971898.html
Copyright © 2020-2023  润新知