美文网首页iOS基础知识
iOS 属性和成员变量的区别

iOS 属性和成员变量的区别

作者: jjslove | 来源:发表于2017-09-19 14:43 被阅读0次

    属性和成员变量都是类的构成部分,用来保存类的数据,要很好的理解他们,需要从一下几个方面:

    • 声明方式
    • 声明的位置
    • 作用域和访问的方式

    1. 声明的方式

    都可以在.h 和 .m 文件中声明,注意修饰符。
    Animal.m

    @interface Animal ()
    @property (nonatomic, strong) NSString *mName;
    @end
    
    @implementation Animal{
    @public
        NSString *mPublicMemberValue;
    @private
        NSString *mPrivateMemberValue;
    @protected
        NSString *mProtectedMemberValue;
    @package
        NSString *mPackageMemberValue;
    }
    
    -(void)showSomething{
      NSLog(@"");
    }
    

    Animal.h

    #import <Foundation/Foundation.h>
    
    @interface Animal : NSObject{
        @public
        NSString *hPublicMemberValue;
        @private
        NSString *hPrivateMemberValue;
        @protected
        NSString *hProtectedMemberValue;
        @package
        NSString *hPackageMemberValue;
    }
    
    @property (nonatomic, strong) NSString *hName;
    
    @end
    

    Bird为Animal子类
    Bird.h

    #import "Animal.h"
    
    @interface Bird : Animal
    
    @end
    
    

    Bird.m

    #import "Bird.h"
    
    @implementation Bird
    
    -(void)birdShowSomething{
        NSLog(@"");
    }
    
    @end
    
    

    接下来我们从一下几个地方看下对属性的访问

    • 外部访问属性
    image.png
    • 外部访问成员变量
    image.png
    • 子类访问属性
    image.png
    • 子类访问成员变量
    image.png image.png

    总结

    1. 成员变量通过->访问, 属性通过.访问
    2. 在.h中声明的属性,可以被子类或外部访问。
    3. 在.m中声明的属性,外部(含子类)不可访问。
    4. 在.h中声明的成员变量:
    修饰符 访问方式
    @public 都可访问
    @protected 只有子类可访问,外部不可访问
    @private 外部(含子类)不可访问
    @package 同一个package下都可访问
    1. 在.m中声明的成员变量
      外部(含子类)不可访问

    相关文章

      网友评论

        本文标题:iOS 属性和成员变量的区别

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