Object-C——核心语法(1)

 

一、点语法

   1、概念:  我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法"。

   2、本质: 点语法的本质还是方法调用

   3、基本用法:

 1 #import <Foundation/Foundation.h>

 2 #import "Person.h"

 3 

 4 int main(int argc, const char * argv[])

 5 {

 6     Person *p = [Person new];

 7     

 8  

 9     p.age = 10; // [p setAge:10];

10     

11     int a = p.age; // [p age];

12     

13     

14     p.name = @"Jack";

15     

16     NSString *s = p.name;

17     

18     NSLog(@"%@", s);

19     

20     return 0;

21 }

二、成员变量的作用域

     1、  @public : 在任何地方都能直接访问对象的成员变量
     2、  @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
     3、@protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)
     4、@package : 只要处在同一个框架中,就能直接访问对象的成员变量
     5、 @interface和@implementation中不能声明同名的成员变量

     6、代码举例

 1 #import <Foundation/Foundation.h>

 2 

 3 @interface Person : NSObject

 4 {

 5     int _no;

 6     

 7     @public // 在任何地方都能直接访问对象的成员变量

 8     int _age;

 9     

10     

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

12     int _height;

13     

14     @protected // 能在当前类和子类的对象方法中直接访问

15     int _weight;

16     int _money;

17 }

18 

19 - (void)setHeight:(int)height;

20 - (int)height;

21 

22 - (void)test;

23 @end
 1 @implementation Person

 2 {

 3     int _aaa;// 默认就是私有

 4     

 5     @public

 6     int _bbb;

 7     // @implementation中不能定义和@interface中同名的成员变量

 8     // int _no;

 9 }

10 

11 - (void)test

12 {

13     _age = 19;

14     

15     _height = 20;

16     

17     _weight = 50;

18     

19     _aaa = 10;

20 }

21 

22 - (void)setHeight:(int)height

23 {

24     _height = height;

25 }

26 

27 - (int)height

28 {

29     return _height;

30 }

31 

32 @end

三、 @property和@synthesize
     1、@property:可以自动生成某个成员变量的setter和getter声明

1 @property int age;

2 @property int height;

这两句和下面的两段代码是等价的

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

2 - (int)age;

3 

4 

5 

6 - (void)setHeight:(int)height;

7 - (int)height;

     2、 @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量

       基础用法:

 1 #import "Person.h"

 2 

 3 @implementation Person

 4 

 5 

 6 @synthesize age = _age;

 7 

 8 @synthesize height = _height;

 9 

10 @synthesize weight = _weight, name = _name;

11 

12 @end


四、id的用法

      id是万能指针,能指向或者操作任何OC对象

      用法举例

 1 #import <Foundation/Foundation.h>

 2 #import "Person.h"

 3 

 4 

 5 void test(id d)

 6 {

 7     

 8 }

 9 

10 int main(int argc, const char * argv[])

11 {

12 

13     @autoreleasepool {

14         Person *p = [Person new];

15   

16         

17         NSObject *o = [Person new];

18         

19         

20       

21    

22         id d = [Person new];

23         

24         [d setAge:10];

25         

26         [d setObj:@"321423432"];

27         

28         NSLog(@"%d", [d age]);

29     }

30     return 0;

31 }

Person的.h和.m文件

 1 //.h 文件

 2 #import <Foundation/Foundation.h>

 3 

 4 @interface Person : NSObject

 5 @property int age;

 6 @property id obj;

 7 @end

 8 //.m

 9 #import "Person.h"

10 

11 @implementation Person

12 

13 @end

五、构造方法
    1、构造方法:用来初始化对象的方法,是个对象方法,-开头

          构造过程:
            ①   分配存储空间  +alloc
            ②   初始化 -init

1  // 1.调用+alloc分配存储空间

2     // Person *p1 = [Person alloc];

3     // 2.调用-init进行初始化

4     // Person *p2 = [p1 init];

5     

6 //    // 调用-init进行初始化

7 //    Person *p3 = [Person new];

    2、重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

    3、 重写构造方法的注意点
       ① 先调用父类的构造方法([super init])
       ② 再进行子类内部成员变量的初始化

 1 #import "Person.h"

 2 

 3 @implementation Person

 4 

 5 

 6 // 重写-init方法

 7 //- (id)init

 8 //{

 9 //    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性

10 //    self = [super init]; // 当前对象 self

11 //    

12 //    

13 //    // 2.如果对象初始化成功,才有必要进行接下来的初始化

14 //    if (self != nil)

15 //    { // 初始化成功

16 //        _age = 10;

17 //    }

18 //    

19 //    // 3.返回一个已经初始化完毕的对象

20 //    return self;

21 //}

22 

23 - (id)init

24 {

25     if ( self = [super init] )

26     { // 初始化成功

27         _age = 10;

28     }

29     

30     // 3.返回一个已经初始化完毕的对象

31     return self;

32 }

33 

34 @end

六、 自定义构造方法
       自定义构造方法的规范
        1、一定是对象方法,一定以 - 开头
        2、返回值一般是id类型
        3、方法名一般以initWith开

       使用方法:

 1 #import <Foundation/Foundation.h>

 2 

 3 @interface Person : NSObject

 4 @property NSString *name;

 5 @property int age;

 6 - (id)initWithName:(NSString *)name;

 7 

 8 - (id)initWithAge:(int)age;

 9 

10 - (id)initWithName:(NSString *)name andAge:(int)age;

11 

12 @end

 

 


 

     

你可能感兴趣的:(object)