天天看点

OC -- @interface和@property两种声明变量方式的区别

首先,看一下两种方式分别是如何定义一个变量的:

1、在  @interface :NSObject{} 的括号中,当然NSObject 是指一个父类,可以是其它。

      形式如下:

     @interface 类名:父类{

           NSString *strName;

     }

2、另外一种是直接在@interface:NSSObject{}括号之后,用@property去定义一个变量。

      形式如下:

      @interface 类名:父类{

          // NSString *strName;

      }

      @property (assign,readonly) NSString *strName;

在第二种方式中,有的人习惯在这两个地方同时声明变量,即还声明了红色注释的那行。其实,这样写是没有必要的。

那么,这两种方式定义的变量有什么区别?

区别如下:

    1、只在@interface中定义变量的话,你所定义的变量只能在当前的类中访问,在其它类中是访问不了的;而用@property声明的变量可以在外部访问。

        访问方式:直接使用私有变量的名称就可以访问。

    2、用@property声明的变量,一般要在.m文件中用@synthsize去合成相应的setter,getter方法。

如:@synthsize strName=_strName;而且可以使用“self.变量名”的方式去读写变量。而用@interface的方式就不可以。

        访问方式:“self.变量名”或者“[self set变量名]”