zoukankan      html  css  js  c++  java
  • iOS开发-OC语言 (六)点语法和@property

    点语法和@property

    知识点

    1.setter/getter函数

    2.点语法

    3.@property语法和属性

    ========================================

    一、setter和getter函数 

      1.setter和getter函数的作用

    setter  方法:   修改对象的字段/实例变量

    getter 方法:   读取对象的字段/实例变量

    setter 方法: 可以带有多个参数,可以同时给多个变量赋值

    getter方法: 不带参数,只能返回一个变量的值。

    2.setter和getter如何命名

      setter 方法的命名:

    xxx: 表示的是成员变量的名字

    //带有一个参数

    - (void)setXxx:(参数类型)参数1;

    //带有多个参数

    - (void)setXxx:(参数类型)变量名字  xxx:(参数类型)变量名字 ……;

    getter 方法的命名:

    - (返回值类型)xxx;

    =======================================

    二、点语法   为了让程序设计简单化

    隐藏了内存管理细节

    隐藏了多线程、同步、加锁

    2.点语法的作用

    属性可以在不适用 【对象 方法名字】 的情况下使用点语法

    无需调用[foo value] 可以调用foo.value 来访问. 注意跟结构体的区别

    虽然foo.value 看起来像是直接访问value变量,但是属性始终调用

    方法,而这些方法又可以访问对象的数据。

    3.点语法的调用

         //一个参数的set方法可以使用点语法赋值

        [xiaoxin setName:@“小新”];

        //这不是使用成员变量,是使用set方法

        xiaoxin.name = @"小新";

        //可以通过.语法调用get方法

        NSString * ret = [xiaoxin name];

        //xiaoxin.name在等号左边就是set方法,使用这个表达式的值,就是get方法

        ret = xiaoxin.name;

        

    【注】点语法只是访问setter getter方法,不是使用成员变量。

    4.点语法和setter/getter函数的关系

    【点语法和[]写法】本质一样,同样是发送set和get消息,只不过写法不同。

             

      dog.name = @“xiaobai”;

    展开成: [dog setName: @“xiaobai”];

          NSString *nameString = dog.name;

    展开成: NSString *nameString = [dog  name];

              

    =======================================

    三、属性(@property)和合成(@synthesize)

    1.当一个类中的成员变量非常多的时候,setter和getter是否会显得非常臃肿,@property和@synthesize可以使代码变得简洁。

    2.@property用处

      1) 让编译器自动声明setter和getter

      

    3.@property使用

      1)  @property 成员变量类型  变量名;

    4.@synthesize用处

      1)让编译器自动实现setter和getter函数 

    5.@synthesize可以省略(Xcode4.6以后可以省略)

       //声明一个属性,相当于声明了下面两个方法

       @property NSString * name;

       //- (void)setName:(NSString *)name;

       //- (NSString *)name;

        @synthesize name = _name;

        //Xcode4.6以前,需要这样实现,如同实现了下面两个方法

        //Xcode4.6起,无需写@synthesize,自动实现下面两个方法,会自动关联名位_XXX的变量

        //如果类中并没有对应的变量,会自动生成相应的变量。

     ======================================

    @property属性

    1.原子操作

      atomic(缺省)/nonatomic

     

    2. assign  直接赋值修饰符(缺省),一般用在基本类型。

               

            //缺省(默认)修饰符

            @property (assign) NSString * name;

             //同时生成set、get方法

          直接赋值,展开的set方法:

         - (void)setName:(NSString *)name

         {

            _name = name;

         }

    3.读写操作

      readonly/readwrite(缺省)

    //只读修饰符

       //只生成getter,没有setter

        @property (readonly) NSUInteger age;

        

        /缺省修饰符

        //同时生成set、get方法

        @property (readwrite) NSString *name;

       

    4. 给set方法和get方法起别名

    //getter修饰符

       //给get方法起别名

        @property (getter = myWeight) NSUInteger weight;

       //setter修饰符

       //给set方法起别名

       @property (setter = setLife:) BOOL alive;

       //一个属性可以添加多个修饰符,多个修饰符间用逗号隔开。

       @property (setter = setUsername:, getter = getUsername) NSString *name;

      

    5. 多个属性修饰符,需要用逗号隔开

    @property (nonatomic, readonly,getter = birth) 

    NSString * birthday;

  • 相关阅读:
    移植tslib库出现selected device is not a touchscreen I understand的解决方法
    2017- 韦东山视频学员成果精选(三)
    2017-韦东山视频学员成果精选(二)
    2017-韦东山视频学员成果精选(一)
    字符设备驱动另一种写法—mmap方法操作LED
    使用ubuntu16.04配置linux内核和busybox出现错误的解决方法总结
    100000个嵌入式学习者遇到的PING不通问题,我们使用这一个视频就解决了,牛!
    推荐使用集串口,SSH远程登录和FTP传输三合一工具MobaXterm
    外设位宽为8、16、32时,CPU与外设之间地址线的连接方法
    Laravel 日志配置以及设置按日期记录日志
  • 原文地址:https://www.cnblogs.com/fcug/p/6279685.html
Copyright © 2011-2022 走看看