美文网首页
Property 属性

Property 属性

作者: 橙子遇到八哥 | 来源:发表于2020-03-18 17:39 被阅读0次

    概念:@property name: setter方法+getter方法+_name

    1. 声明

    @property (nonatomic, copy) NSString *name; //自动合成
    @property (nonatomic, copy) NSString *sex;
    

    2. 定义

    /*
        两个一起写会报错,因为重写了get和set方法,编译器认为开发者想手动管理@property,此时会将@property作为@dynamic来处理
        因此也就不会自动生成变量。解决方法,显示的将属性和一个变量绑定:@synthesize name = _name;
        @synthesize name = _name;
    */
    // 自动合成
    @synthesize name = _name;
    - (void)setName:(NSString *)name{
        _name = name;
    }
    
    //get 不能使用self. 会造成死循环
    -(NSString *)name{
        return _name;
    //    return self.name;  // 错误的写法,会造成死循环
    }
    

    3. 使用

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Animal *an = [[Animal alloc] init];
            an.name = @"bug";
            an.sex  = @"femail";
            
            NSLog(@"animal name:%@ sex:%@", an.name, an.sex);
        }
        return 0;
    }
    

    4. 扩展(手动合成)

    @interface Animal : NSObject{
        NSString *_sex;
    }
    
    //手动合成
    @dynamic sex;
    -(void)setSex:(NSString *)sex{
        _sex = sex;
    }
    -(NSString *)sex{
        return _sex;
    }
    
    @end
    

    5. @property修饰符

    /*
    1. 修饰符种类
        原子性-nonatomic, atomic
        读写权限-readwrite和readonly
        内存管理-assign,strong,weak,copy,unsafe_unretained
        set、get方法
     
    2. weak和assign的区别
        a) Weak修饰对象,对象释放后,引用计数为0,对象会被置为nil。
        b) assign修饰基本数据类型,如果用assign修饰对象,对象释放后,引用计数为0后,
           对象会变成野指针,容易崩溃。为什么基本数据类型不会,因为基本数据类型是在栈上面,不是在堆上面的。
     3. copy和strong
        copy 是深拷贝
        strong 是浅拷贝
     */
    

    相关文章

      网友评论

          本文标题:Property 属性

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