先上代码
@interface parentModel : NSObject
{
//默认为保护变量,可以被这个类的文件和子类文件调用
NSString * str1;
//私有实例变量,只能在这个类的文件中调用
@private
NSString *str2;
//保护变量 可以被这个类的文件和子类文件调用
@protected
NSString *str3;
NSString *str4;
//公共变量 可以被本类文件,子类文件,其他文件调用
@public
NSString *str5;
NSString *str6;
}
推荐将私有变量写在.m文件里的
@interface parentModel ()
{
//私有实例变量
NSString * str7;
}
@end
@implementation parentModel
{
//私有实例变量 推荐写法
NSString *str8;
}
做一个小测试,为三种变量声明属性,测试的结果是通过属性可以在外部文件改变三种变量的值
@interface parentModel : NSObject
{
//默认为保护变量,可以被这个类的文件和子类文件调用
NSString * _str1;
//私有实例变量,只能在这个类的文件中调用
@private
NSString *_str2;
//保护变量 可以被这个类的文件和子类文件调用
@protected
NSString *_str3;
NSString *_str4;
//公共变量 可以被本类文件,子类文件,其他文件调用
@public
NSString *_str5;
NSString *_str6;
}
@property(nonatomic, strong)NSString *str2;
@property(nonatomic, strong)NSString *str3;
@property(nonatomic, strong)NSString *str5;
@end
@implementation parentModel
@synthesize str2 = _str2;
@synthesize str3 = _str3;
@synthesize str5 = _str5;
@end
拓展:
属性(变量)的作用 成员变 量扩充了存取方法
属性会自动生成实例变量,set get方法
类别不能添加属性的原因就是无法生成实例变量 可以用runtime弥补
题外话:
为了风格一致,实例变量应该添加 “_” 如:NSString *_strA;
插一句:声明 创建 初始化 的理解
.h文件是声明文件 用于声明类的变量和方法,所以.h中的变量(实例变量 属性变量)都是声明文件
.m是实现文件 用实现类的变量和方法,alloc是创建过程,分配空间,init是初始化,new关键字 = alloc + init new关键字的缺点是不能定制初始化过程
分享几个相关的帖子:
@property与@synthesize的理解
iOS成员属性和成员变量的区别
解惑——iOS中成员变量和属性区别
IOS属性的作用