属性和成员变量都是类的构成部分,用来保存类的数据,要很好的理解他们,需要从一下几个方面:
- 声明方式
- 声明的位置
- 作用域和访问的方式
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
接下来我们从一下几个地方看下对属性的访问
- 外部访问属性
- 外部访问成员变量
- 子类访问属性
- 子类访问成员变量
总结
- 成员变量通过->访问, 属性通过.访问
- 在.h中声明的属性,可以被子类或外部访问。
- 在.m中声明的属性,外部(含子类)不可访问。
- 在.h中声明的成员变量:
修饰符 | 访问方式 |
---|---|
@public | 都可访问 |
@protected | 只有子类可访问,外部不可访问 |
@private | 外部(含子类)不可访问 |
@package | 同一个package下都可访问 |
- 在.m中声明的成员变量
外部(含子类)不可访问