二、oc中的setter与getter方法以及点语法

来源:互联网 发布:计算机数据结构与算法 编辑:程序博客网 时间:2024/05/16 08:30

    ------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>、<a href="http://www.itheima.com" target="blank">.Ios培训</a>、期待与您交流! -------


       我们知道,在oc中,会有类的概念,我们可以将大致相同概念的东西归为一个类。大部分类中会包含有成员变量,初学时,我们会将成员变量设置为public类型,因为这样方便于我们进行赋值运算,可以通过''->''运算符进行调用。


@interface Person : NSObject{  @public // 将成员变量设置为公有类型,在任何地方都可以给它赋值    int _age;    double _height;}@end@implementation Person@endint main(){    Person *p = [Person new];        p->_age = 90;  // 通过->运算符,给_age赋值    p->_height = 200; // 通过->运算符,给_height赋值        NSLog(@"_age = %d,_height = %.2f",p->_age,p->_height); // 打印相应的值,用于检测,赋值是否成功    return 0;}
      但是,一般情况下,并不提倡使用public类型的成员变量,因为这样,会使这个类中的成员变量的安全性降低,公开化太高,任何人都可以修改成员变的值,保密性也较差。因此,一般选择设置为pravite类型或者是protected类型。pravite类型是成员变量,即为在该类中可以直接访问。protected类型的成员变量,即为该类与该类的子类中可以直接访问。

     直接访问是指,直接给变量进行赋值。设置为了pravite与protected类型的成员变量,虽然部分情况下不能直接访问成员变量,但是可以通过setter与getter方法访问成员变量。

  例如:

#import<Foundation/Foundation.h>@interface Person : NSObject{    @private // 将成员变量设置为私有类型,只能在该类中直接访问    int _age;    double _height;}- (void)setAge:(int)age; // _age的setter方法的声明- (int)age;              // _age的getter方法的声明- (void)setHeight:(double)height; // _height的setter方法的声明- (double)height;                 // _height的getter方法的声明@end@implementation Person- (void)setAge:(int)age // _age的setter方法的实现{    _age = age;}- (int)age // _age的getter方法的实现{    return _age;}- (void)setHeight:(double)height // _height的setter方法的实现{    _height = height;}- (double)height // _height的getter方法的实现{    return _height;}@endint main(){    Person *p = [Person new];        [p setAge:10]; // 调用_age的setter方法,等同于_age = 10    NSLog(@"_age = %d",[p age]); // 输出_age的getter方法        [p setHeight:175]; // 调用_height的setter方法,等同于_height = 175    NSLog(@"_heighr = %.2f",[p height]); // 输出_height的getter方法            return 0;    }

 setter方法

 1.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

 2.命名规范:

 1>方法名必须以set开头

 2> set后面跟上成员变量的名称

 3> 返回值一定是void

 4> 一定要接收一个参数,而且参数类型跟成员变量类型一致

 5> 形参的名称不能跟成员变量一样

 getter方法

 1.作用:返回对象内部的成员变量

 2.命名规范:

 1> 肯定有返回值,返回值类型肯定与成员变量类型一致

 2> 方法名跟成员变量名一样

 3> 不需要接收任何参数

 setter方法,一般是用于设置不能直接访问的成员的变量的值,例如:需要在main函数中给Person类中的成员变量_age与_weight赋值,这时可以用到setter方法。

  getter方法,一般是用于在setter方法已经设置好了成员变量的值后,用于查看当前成员变量的值,常与setter方法配合使用。

  

 上面是setter方法与getter的基本写法,但是当成员变量过多的时,这样重复写同一类型的代码,会显示很无意义。因此我们可以用更加简洁的方法,来写setter于getter方法。

   例如:

#import<Foundation/Foundation.h>@interface Person : NSObject{    @private // 将成员变量设置为私有类型,只能在该类中直接访问    int _age;    double _height;}@property int age; // _age的sette与getter方法的声明@property double height; // _height的setter与getter方法的声明@end@implementation Person@synthesize age = _age; // 其实这里也可以不用写@synthesize height = _height; // 同上@endint main(){    Person *p = [Person new];        [p setAge:10]; // 调用_age的setter方法,等同于_age = 10    NSLog(@"_age = %d",[p age]); // 输出_age的getter方法        [p setHeight:175]; // 调用_height的setter方法,等同于_height = 175    NSLog(@"_heighr = %.2f",[p height]); // 输出_height的getter方法            return 0;    }

   用@property与@syntheszie的方法,可以快捷方便的达到相应的成员变量的setter与getter方法,通过同样的检测方法,可知,设置成功。其实在新版本的xcode中,可以更加简洁,可以只写出@property方法,不需要写@synthesize方法,也可以达到设置好setter于getter方法的目的。


  @property与@synthesize,其实苹果官方已经封装好的方法,初学者,可以不用深究起具体实现的步骤,记住其书写的格式即可,这样可以便于快捷的写出setter于getter方法,这也是面向对象编程的一大好处。


    点语法,同样也是为setter月getter方法服务的,一般情况下我们使用  [方法执行者 方法  :  传参]的形式来调用setter与getter方法。但是点语法可以更加直观与快捷。

   例如:(上面代码中main函数中可以改为:)

int main(){    Person *p = [Person new];        p.age = 10; // 调用_age的setter方法,等同于_age = 10    NSLog(@"_age = %d",p.age); // 输出_age的getter方法        p.height = 175; // 调用_height的setter方法,等同于_height = 175    NSLog(@"_heighr = %.2f",p.height); // 输出_height的getter方法            return 0;    }

          

       当写成p.age时,系统会自动调用相应的setter方法与getter方法。有人会问,这个是怎么识别是setter方法与getter方法的呢。其实比较简单,当p.age被赋值的时候,例如p.age = 90时,系统会自动调用_age的setter方法,给_age赋值,若写成p._age,则系统默认是给__age赋值。

   当p.age传递一个值给另外一个变量,或者是返回一个值时,例如 int b = p.age,那么系统会自动调用_age的getter方法,返回出一个值。

  

   综上所述,setter方法与getter方法都是oc中最最基本的语法,是初学者必须掌握好,并且熟练的语法,他可以便于我们操作成员变量。点语法也是为了setter方法与getter方法服务的,为程序员提供易读且直观的代码。




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 房产权40年以后怎么办 面试回答不了考官的问题怎么办 轻伤事故对方要钱太多我怎么办 退休后有房子住公积金怎么办 江苏副高评过不聘怎么办 抗环瓜氨酸肽抗体高怎么办 脚被磨破了好痛怎么办 脚磨破皮肿了怎么办 脚磨破皮发炎了怎么办 3个月婴儿流口水怎么办 beats耳机被偷了怎么办 beats X耳机丢了怎么办 头戴耳机戴着热怎么办 长时间戴耳机耳朵疼怎么办 手表秒针走得声音很大怎么办 顾客总找老板剪头发怎么办 马来西亚国籍想去中国怎么办 有限元学位课挂了怎么办 五百丁简历导出后不一样怎么办 面试早到了1小时怎么办 头顶头发会越来越少怎么办 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办 我的恐龙手机不支持ar怎么办 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办 蚂蚁借呗还款金额受限怎么办 蚂蚁借呗不能借钱了怎么办 美柚手机号换了怎么办 美柚他他圈被禁言了怎么办? 被蝎子蜇了屁股怎么办 被蝎子蛰了该怎么办 孕妇让蝎子蛰了怎么办 脸被蝎子蛰了怎么办 皮肤看着有点老怎么办 王者铭文被卖了怎么办