黑马程序员-- 核心语法 Property synthesize 成员变量的作用域

 -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

  -----------并不是生来就是大神、代码量决定一切、其他都是假象、----------- 


 成员变量的作用域

   1. 成员变量的作用域有以下四种

    1@public:任何地方都能直接访问对象的成员变量

    2@private:只能在当前类的对象方法中直接访问

    3protected:能在当前类和子类的对象方法中直接访问

    4package:只要处在同一框架中,就能直接访问对象的成员变量

   2. 如果什么都不写,默认为@protected

   3. 方法实现中(.m文件)也可以定义成员变量,默认为@private(因为main函数中只包含.h文件,而且定义的成员变量不能和              @interface中同名)

   4. @interface@implementation中不能声明同名的成员变量

   5. OC为单继承,一个类只能继承一个父类

      父类(超类)superclass

      子类  subclass

   @property@synthesize

   1. @property用在@interface中,会自动生成某个成员变量的setget方法的声明和实现,并且生成了_age这个成员变量

      @interface PersonNSObject

     {

          int _age

     }

       @property int age        //相当于-voidsetAge : (int)age;    -(int)age;

   2. @synthesize用在@implementation中,会自动生成某个成员变量的setget方法的实现,并且访问_age这个成员变量


      @implementation Person

      @synthesize age=_age

      //@synthesize age=_age       相当于

       -voidsetAge:(int)age;

        {

           _age=age;

        }

           -(int)age;

        {

          return _age;

        }

   3. 如果只写了@synthesize age,默认访问age这个成员变量,如果没有age这个成员变量,会生成age这个成员变量

   4. @synthesize age=_age 访问的是_age这个成员变量

   5. 如果一个类没有定义成员变量,@synthesize age=_age会自动生成@private类型的_age变量

   6. XCODE4.4之后,@property可以同时生成setget方法的声明和实现

*结论: @property可以替代@synthesize,生成成员变量,并且生成了setget方法的声明和实现

   7. 写了@property,若自己定义了set方法,编译器只会生成get方法和成员变量

      写了@property,若自己定义了get方法,编译器只会生成set方法和成员变量

      写了@property,若自己定义了setget方法,编译器就不会生成不存在的成员变量 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值