美文网首页
iOS 成员变量、实例变量、property的区别和联系

iOS 成员变量、实例变量、property的区别和联系

作者: ManThirty | 来源:发表于2017-08-06 13:57 被阅读0次

    在iOS的第一个版本时,property是OC语言的一项新特性,在声明property之前必须首先声明与之对应的成员变量。

    @interface ViewController : UIViewController
    {
        UIButton * button;
    }
    
    @property (nonatomic, strong) UIButton * button;
    @end
    

    在iOS5后,苹果将默认编译器由GCC转换为LLVM(low level virtual machine),从此就不需要为属性声明成员变量了。LLVM如果发现一个属性没有匹配的实例变量,它将自动创建一个以下划线开头的成员变量,同时需要和@synthesize(写在.m文件中,编译器会自动生成对应的set和get方法)搭配使用。

    而在下面的代码中:

    @interface ViewController : UIViewController
    {
        UIButton * button;
        int count;
        id data;
    }
    
    @property (nonatomic, strong) UIButton * button;
    @end
    

    在{ }内所声明的变量都是成员变量,所以button、count、data都是成员变量。因为成员变量没有set、get方法,所以成员变量用于类内部,无法与外界接触,也就是说,成员变量是类专属的、私有的。

    那实例变量是什么呢?

    实例变量本质上是成员变量,是成员变量的一种特殊情况,实例变量本质上就是成员变量,只是实例是针对类而言,实例是指类的声明。{ }中的button和data是实例变量(以为id是OC特有的类,本质上江id等同于(void *))

    综上所述:
    成员变量是定义在{ }中的变量,是类私有。包含实例变量和基本数据类型变量。
    实例变量是成员变量的一种特殊情况,其类型是OC的一个类。
    property是用于和其他对象进行交互的变量,在声明property时,编译器会自动创建一个以下划线开头的成员变量

    相关文章

      网友评论

          本文标题:iOS 成员变量、实例变量、property的区别和联系

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