美文网首页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