首页 > 代码库 > 黑马程序员 成员变量的作用域,property,id,构造方法,点语法

黑马程序员 成员变量的作用域,property,id,构造方法,点语法

#import <Foundation/Foundation.h>

@interface Person : NSObject

{

     /*

        成员变量作用域有四种:

        1.@public:能在程序中任何地方直接访问成员变量

        2.@protect:能在当前类和子类中直接访问成员变量(默认情况下)

        3.@provate:只能在当前类中直接访问成员变量(@property)

        4.@package:在同一框架中能直接访问成员变量

       */

      @provate

      int _age;

      @protect

      int _height;

      @public

      double _weight;

}

/*

   @property语句的作用是自动生成setter和getter方法,自动生成_age(private),如果程序上有_age成员变量,就不会生成。同理如果程序上已经有了setter或getter方法,也不会生成,但如果系统上有了setter和getter方法,即使没有成员变量,也不会再自动生成

 */

@property int age;

@property int height;

@end

@implementation Person

// 构造方法是指初始化(init)对象的方法,通过重写init方法,可以使成员变量初始化不为0

- (void)init

{

    if(self = [super init])

    {

      _age = 10;

    }

    return self;

}

@end

int main()

{

   // id是万能指针,指向任意对象,它相当于NSObject *。因为id本身包括*,所以使用id时不要再加上*,以下的id指向person对象

   id p = [Person new];

   // 因为weight是@public,所以它可以在程序的任意地方直接访问成员变量

   p ->weight = 61.5;

   // p.height是点语法相当于[p setHeight:173],因为_height是@protect,在main中不能直接访问,所以用setter方法

   p.height = 173;

  //  p.age是点语法相当于[p setHeight:173],因为_age是@provate,在main中不能直接访问,所以用setter方法

   p.age = 25;

   /*

       new方法包含两个步骤,一个步骤是alloc方法,一个步骤是init方法

       1.第一个步骤+alloc方法,分配存储空间,返回内存地址,返回一个不可用的对象

       2.第二个步骤-init方法,使不可用的对象初始化,返回一个初始化的对象

     */

     // id p1 = [Person new];

        id p1 = [[Person alloc] init];

        // 通过结果可以知道age成员变量初始值不为0

        NSLog(@"%d"p.age);

    return 0;

}