对IOS中实例变量@private @protected @public关键字的理解

先上代码

@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属性的作用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,290评论 0 2
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,273评论 30 472
  • 不期而遇相约仙本那,成就自己的蓝色海洋梦;海底两万里,潜下去,拥抱水底世界美丽的蓝。 每个人心中都有一片海,它可以...
    周Misszhou阅读 435评论 0 0
  • 况且,还有一堆的“绿茶婊”、“茶米油盐”、“红灯绿酒”、“七年之痒”、“花样作死”、“前任回头艹”、“加班应酬”、...
    游走星宿阅读 181评论 0 1
  • 可用一些小工具来管理Ubuntu的启动选项: 小工具rcconf: #sudo apt-get rcconf #s...
    alwayswrong阅读 5,350评论 0 3