• ios中点语法、property跟synthesize用法


    一:OC中得点语法

    1> 点语法的基本使用:
    ·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值
     
    2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个功能)
         实际上点语法就是set和get方法,当编译遇到点语法时,编译器就会将点语法转成set和get方法。
    注意:也就是说,如果类中没有实现set和get方法,那么就不会有点语法
     
    p.name = @“”; 实际上就是 [p setName:@“”];
     
    在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。
     
    3> 点语法的注意点
    下面的使用方式是一个死循环:

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

    (2)在get方法中,return self.age;相当于是[self age];
    也就是说,在set和get方法中不能使用(self点成员变量)造成死循环
    当然了如果访问成员变量的话可以使用_成员变量。
     
    例子:
    - (void)setAge:(int)age
     {
         _age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge]; }
        self.age = age (错误,死循环)
     }
     
    二:property和synthesize关键字的使用
    注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现。
    1)@propery int age;   在4.4之前是帮我们声明age的get和set方法

      编译时遇到这一行,则自动扩展成下面两句:

      - (void)setAge:(int)age;

      - (int)age;

     

    2)@synthesize age;     在4.4之前,帮我们实现get和set方法

        .m文件中帮我们生成一个私有的变量age

                .m中的变量是不能够被继承的

    @synthesize age = _age; 表示 get 和set方法 指定设置_age的值

    当然了4.4之前我们需要声明(_成员变量)

    3)@property int age;

        在xcode4.4之后

        1)声明age的get和set方法

        2)实现age的get和set方法

               3)生成一个_age(.h声明) (我们不用单独声明(_成员变量)

    注意:

      1,这种方式生成的成员变量是private的。(因此在后面我们在子类或者外部通过点语法也就是get和set方法来访问@property修饰的成员变量)

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

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

      4,手动实现:

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

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

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

    5,在@property中readonly修饰的成员变量只有get方法,也就是只有取值不能改值,

    目前遇到一个问题,readonly修饰的NSString成员属性,.m中可以通过(_成员变量)但是UI控件的话,.m中不能访问(_成员变量)

    @property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现。

    注释:在Xcode4.5及以后的版本中,可以省略@synthesize ,编译器会自动帮你加上getter 和 setter 方法的实现,并且默认会去访问_age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age的私有成员变量。

    读写属性: (readwrite/readonly)
    setter语意:(assign/retain/copy)
    原子性: (atomicity/nonatomic) 

    各参数意义如下: 
    readwrite: 产生settergetter方法
    readonly: 只产生简单的getter,没有setter。
    assign: 默认类型,setter方法直接赋值,而不进行retain操作
    retain: setter方法对参数进行release旧值,再retain新值。
    copy: setter方法进行Copy操作,与retain一样
    nonatomic: 禁止多线程,变量保护,提高性能 

  • 相关阅读:
    Python网站目录爬行
    【编程】:记录一些函数
    Slowloris的基本使用
    SET——PowershellAttackVectors
    noi寒假刷题之旅_1.6编程基础之一维数组(15题)
    js进度条
    JS控制滚动条的位置
    svn和GitHub的使用
    tomcat配置项目虚拟路径
    重启服务器,上传的图片被删除
  • 原文地址:https://www.cnblogs.com/liuting-1204/p/5715308.html
Copyright © 2020-2023  润新知