Objective-C之点语法和属性

一.点语法

       点语法的本质是对 set 和get方法的调用.

Student *stu = [[Student alloc] init];
stu.ID = 10;//set方法

        注意:

        1.stu.ID = 10,不是给Student成员变量ID “直接赋值”,而是调用Student中的setID方法,“间接”给成员变量赋值,并且传递10,所以   stu.ID = 10   等于    [stu setID :10];

         2.也可以调用get方法,可以点语法写为 stu.id , 相当于 【stu ID】;    

         3.在其他文件中访问该类的成员变量只有一种方式即使用"->" 如stu->ID,这种情况要求在@public修饰的前提下。

            在本类中可以  "_ID"  或 stu -> "ID";


          死循环的两种方式:

        4.在set方法中,self.age=age;相当于是[self setAge:age];

        5.在get方法中,return self.age;相当于是[self age];


        6.如果属性没有封装setter getter 是无法使用点语法的。


    例子:

    

    

    


二.属性:

        @property @synthesize关键字

在 OC 中经常使用 get 和 set 方法,但是当成员变量太多的时候,就要敲很多行 get 和 set 方法。在 xcode4.4 之前,为了简洁代码。

1.可以使用@property 自动生成某个“成员变量” get 和 set 方法 声明

//当编译,遇到这行时
@property int age;
//自动生成set/get方法
-(void)setAge:(int)age;
-(int)age

2.可以使用@synthesize 帮助生成“成员变量”的get 和 set方法 实现  ,并且会访问_age这个成员变量。

@synthesuze age = _age;
//自动生成
-(void)setAge:(int)age{
_age = age;
}
-(int)age{
return _age;
}

注意点:

@synthesize age = _age;

  • setter 和 getter 实现中会访问成员变量 _age
  • 如果成员变量 _age 不存在,就会自动生成一个 @private 的成员变量 _age

@synthesize age;

  • setter 和 getter 实现中会访问成员变量 age
  • 如果成员变量 age 不存在,就会自动生成一个 @private 的成员变量 age
  • 如果类中同时存在成员变量 age 和_age,则默认情况下会访问与 age 名字一样 的成员变量,即访问 age 而不是_age。


例子:




@property只能写在@interface  @end中,@synthesize只能写在@implementation   @end中

以上的写法,在Xcode4.4以前。


Xcode4.4以后,property增强版。





最新版的功能:

@property int age;这句话完成了3个功能:

(1)生成_age成员变量的get和set方法的声明;

(2)生成_age成员变量set和get方法的实现;

 (3)生成一个_age的成员变量。


注意:这种方式生成的成员变量是private的。


    也可以通过在{}中加上int _age;显示的声明_age为protected的。


原则:get和set方法同变量一样,如果你自己定义了,那么就使用你已经定义的,如果没有定义,那么就自动生成一个。


手动实现:


(1)如果手动实现了set方法,那么编译器就只生成get方法和成员变量;


(2)如果手动实现了get方法,那么编译器就只生成set方法和成员变量;


(3)如果set和get方法都是手动实现的,那么编译器将不会生成成员变量。


注意:父类的property一样可以被子类继承,但是生成的属性是私有的,可以通过setter getter方法来访问



猜你喜欢

转载自blog.csdn.net/Null959_/article/details/81045482