zoukankan      html  css  js  c++  java
  • 属性(@property)、@synthesize

    先前我们学的实例变量是这样的

    1 {
    2     int _age;
    3     int _height;
    4     int age;
    5 }    

    后来学属性

    1 @property int age;

    看到@property 会自动编译生成某个成员变量的setter方法和getter方法的声明

    1 - (void)setAge:(int) age;
    2 - (int)age;

    举例:

    @property int _age;

    就会编译生成

    - (void)set_age:(int) age;

    - (int)_age;

    也就是说你怎么写实例变量就会怎么编译生成,为了生成标准的实例变量的setter方法和getter方法的声明,所以属性不要再加 _ 了,并且setAge大写

    既然使用@property有了实例变量的setter方法和getter方法的声明,那么实现就是@synthesize property

    1 // 后面要求写属性,明确要对哪个属性实现一下setter、getter方法
    2 @synthesize age

    看到@synthesize 会自动编译生成某个成员变量的setter方法和getter方法的实现

    1 - (void)setAge:(int)age {
    2   _age = age;  
    3 }
    4 
    5 - (int)age {
    6   return age;  
    7 }

    如果硬要去访问 _age 那个成员变量,就

    @synthesize age = _age;

    这样会自动生成age的setter方法和getter方法的实现,并且会去访问_age这个成员变量

    注意:左边的age:要实现的是age的setter方法和getter方法

       右边的age:是在实现里去访问_age这个成员变量,所以这样就将属性和实例变量联系在一起了

       系统规定成员变量要加 _ 修饰

    上面的@synthesize age;没写后面的成员变量,会默认访问age

    此时:会自动访问_age这个成员变量,如果不存在,就会自动生成@private类型的_age实例变量,在延展中声明,是私有的

    XCode4.n之后 @property 即生成声明有生成实现

    1 @property int age;

    属性是实例变量_age的一对setter、getter方法的声明和实现

    默认情况下,setter、getter方法中的实现会去访问 _ 开头的实例变量

    学到这里,就清楚了为什么一开始我们学的时候成员变量以 _ 开头,其实系统内部是这样的

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 螺旋矩阵
    Java 第十一届 蓝桥杯 省模拟赛 螺旋矩阵
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Python abs() 函数
    Python数学常量
    Python三角函数
    Python随机数函数
    Python数学函数
    语义分割模型优化
  • 原文地址:https://www.cnblogs.com/xs514521/p/5207621.html
Copyright © 2011-2022 走看看