美文网首页
数据成员:属性与实例变量

数据成员:属性与实例变量

作者: 羊妞麻麻 | 来源:发表于2016-05-09 15:43 被阅读56次

    1.类型成员

    1)数据成员:描述对象的状态
    -属性@property:外部状态 表达实例的状态 对外的接口
    问:编译器会为属性定义生成什么?
    默认情况,编译器会为属性定义propertyName自动合成:
    *一个getter访问器方法:propertyName
    *一个setter访问器方法:setPropertyName
    *一个实例变量_propertyName

    /*自动合成
    - (NSString *)firstName
    {
        return _firstName;
    }
    
    - (void)setFirstName:(NSString *)newValue
    {
        _firstName = newValue;
    }
     */
    main方法:
       //属性基础
            Employee *employee = [[Employee alloc] init];
            [employee setFirstName:@"wu"];//访问器方法
            [employee setLastName:@"yy"];
            [employee print];
            
            employee.firstName = @"h";//属性表达式
            employee.lastName = @"w";
            [employee print];
            
            employee.age = 30;
            
    //        employee._tempConut = 100;类外不可以访问实例方法;
            
            [Employee setMax:500];//类型属性
            Employee.max = 400;//getter访问器方法
    

    -实例变量:对内的 只有实例变量,没有类变量;
    如果自定义了getter和setter,或者是只读属性 readonly定义了getter方法 编译器不在合成实例变量。

    理解使用实例变量与属性的时机
    在类外一定要使用属性来访问,类内大多数通过self.来访问

    - (NSString *)fullName
    {
        return [NSString stringWithFormat:@"%@",self.fullName];
    }
    

    只有以下情况使用实例变量来访问:
    初始化器 init
    析构器 dealloc
    自定义访问器方法

    有一个内存管理的背后操作,实例变量没有,会失去保护。生存周期比较独特。

    实例变量的生存周期
    实例变量的存储,跟随对象实例存储在堆上。
    值类型实例变量直接“内嵌”在对象实例中,跟随对象实例内存释放而被释放。
    引用类型的实例变量通过指针“引用”堆上的引用类型实例,ARC针对引用进行计数管理,自动释放引用计数为0的对象。

    属性的描述特性
    读写特性以及多线程特性:

    @property (readonly)NSString *fullName;//只读属性 不能改set 只能get
    employee.fullName = @"a";//在main函数里面不能访问 会报错
    @property (readwrite)NSString *str;//默认
    
    @property (atomic)NSString *firstStr;//多线程属性 原子性默认
    @property (nonatomic)NSString *lastStr;//非原子性
    

    内存管理的特性
    ARC环境
    &强引用 strong(默认)
    &弱引用 weak 防止循环引用
    &拷贝属性 copy 创建独立拷贝

    @interface Workitem : NSObject
    @property (copy)NSString *content;//拷贝属性 针对可变集合类型 创建独立拷贝
    @property int term;
    @property (weak)Employee *owner;//反向执行
    

    其它情况
    &retain
    &assign
    &unsafe-unretained

    相关文章

      网友评论

          本文标题:数据成员:属性与实例变量

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