先上代碼
@interface parentModel : NSObject
{
//默認為保護變量,可以被這個類的文件和子類文件調(diào)用
NSString * str1;
//私有實例變量,只能在這個類的文件中調(diào)用
@private
NSString *str2;
//保護變量 可以被這個類的文件和子類文件調(diào)用
@protected
NSString *str3;
NSString *str4;
//公共變量 可以被本類文件范舀,子類文件偎肃,其他文件調(diào)用
@public
NSString *str5;
NSString *str6;
}
推薦將私有變量寫在.m文件里的
@interface parentModel ()
{
//私有實例變量
NSString * str7;
}
@end
@implementation parentModel
{
//私有實例變量 推薦寫法
NSString *str8;
}
做一個小測試慨飘,為三種變量聲明屬性志珍,測試的結(jié)果是通過屬性可以在外部文件改變?nèi)N變量的值
@interface parentModel : NSObject
{
//默認為保護變量,可以被這個類的文件和子類文件調(diào)用
NSString * _str1;
//私有實例變量,只能在這個類的文件中調(diào)用
@private
NSString *_str2;
//保護變量 可以被這個類的文件和子類文件調(diào)用
@protected
NSString *_str3;
NSString *_str4;
//公共變量 可以被本類文件谱姓,子類文件躯畴,其他文件調(diào)用
@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彌補
題外話:
為了風(fēng)格一致误趴,實例變量應(yīng)該添加 “_” 如:NSString *_strA;
插一句:聲明 創(chuàng)建 初始化 的理解
.h文件是聲明文件 用于聲明類的變量和方法,所以.h中的變量(實例變量 屬性變量)都是聲明文件
.m是實現(xiàn)文件 用實現(xiàn)類的變量和方法务傲,alloc是創(chuàng)建過程凉当,分配空間,init是初始化售葡,new關(guān)鍵字 = alloc + init new關(guān)鍵字的缺點是不能定制初始化過程
分享幾個相關(guān)的帖子:
@property與@synthesize的理解
iOS成員屬性和成員變量的區(qū)別
解惑——iOS中成員變量和屬性區(qū)別
IOS屬性的作用