美文网首页
对IOS中实例变量@private @protected @pu

对IOS中实例变量@private @protected @pu

作者: 逆天丶改命 | 来源:发表于2017-12-21 21:41 被阅读0次

    先上代码

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

    相关文章

      网友评论

          本文标题:对IOS中实例变量@private @protected @pu

          本文链接:https://www.haomeiwen.com/subject/exvawxtx.html