美文网首页
iOS声明变量用大括号和@property的区别

iOS声明变量用大括号和@property的区别

作者: th先生 | 来源:发表于2018-08-30 19:36 被阅读0次
    一、
    #import <Foundation/Foundation.h>
     
    @interface Person : NSObject
     
    @property (nonatomic, copy) NSString *name;
     
    @end
    

    二、

    #import <Foundation/Foundation.h>
     
    @interface Person : NSObject
     {
         NSString *_name;
     }
    @end
    

    三、

    #import <Foundation/Foundation.h>
     
    @interface Person : NSObject
     {
         NSString *_name;
     }
    @property (nonatomic, copy) NSString *name;
    
    @end
    

    方式三的写法是一种过时的声明变量的方式,xcode在早期@systhesize没有自动合成属性器之前,需要手写 getter与setter方法,下划线从风格上表明这是类的内部变量,要是需要直接使用变量则需要使用get或者set的方式。

    在XCode目前有了自动合成属性器后,编译器会自动帮我们生成一个以下划线开头的的实例变量,所以我们不必去同时声明属性与变量。 我们可以直接用@property的方式来声明一个成员属性,在.m文件中使不使用@systhesize都无所谓,xcode会自动帮你生成getter与setter.

    外部点语法等方式访问该属性时都通过getter,setter方式访问的。@property修饰的name属性相当于大括号里定义的_name属性(@property实际上生成_name变量。所以.m文件中访问该属性时用_name或者self.name来访问,name是直接访问内存,self.name是调用getter方法)。其实在大括号中的属性可以不带下划线的,只是为了符合以前的书写习惯。

    相关文章

      网友评论

          本文标题:iOS声明变量用大括号和@property的区别

          本文链接:https://www.haomeiwen.com/subject/ciidwftx.html