美文网首页
数据的基本类型

数据的基本类型

作者: 奋斗的蝼蚁 | 来源:发表于2020-11-28 14:25 被阅读0次

    常用的基本类型

    iOS OC 基本类型

    assign、copy、strong,weak
    

    基本概念

    • assign 修饰基本数据类型,NSInteger、BOOL
    • copy 、strong、weak 都修饰对象。

    需要注意的点

    assign

    可以修饰对象,但是容易crash,容易才能悬空指针,修饰的对象释放后,指针不会自动置成nil,此时再向对象发消息程序会崩溃。
    修饰对象类型时,不改变其引用计数。
    

    weak

    非拥有关系
    修饰对象类型时,不改变其引用计数,对象释放后,指针为nil,既不保留新值,也不释放旧值。
    

    strong

    拥有关系
    设置新值,保留新值,会释放旧值。
    改变对象的引用计数
    

    copy

    浅拷贝 
    拷贝对象的内存地址,让目标对象和源对象指向同一片空间,增加引用计数。
    
    深拷贝
    目标对象和源对象指向两片内容相同的内存空间
    
    @property(copy) NSMutableArray *array?
    如果赋值过来的是NSMutableArray, copy 之后是NSArray 深拷贝
    如果赋值过来的是NSArray, copy 之后是NSArray 潜拷贝
    
    copy 修饰的对象得到的是不可变对象
    mutableCopy 修饰的对象是可变的对象 都是深拷贝
    
    image.png

    日常开发遇到的坑

    问题一
    用assign 修饰的对象 会发生一些信号量的crash。

    问题二
    testThreeCopy 需要重点注意

    @property (nonatomic, strong) NSMutableArray *mutableArray;
    
    - (void)testCopy{
        NSArray *arrayOne = [[NSArray alloc] init];
        self.mutableArray = arrayOne;
        [self.mutableArray addObject:@"1"];
    }
    
    - (void)testTwoCopy{
        NSArray *arrayOne = [[NSArray alloc] init];
        self.mutableArray = [arrayOne mutableCopy];
        [self.mutableArray addObject:@"1"];
    }
    
    - (void)testThreeCopy{
        NSMutableArray *arrayOne;
        if (!arrayOne) {
            arrayOne = [[NSArray alloc] init];
        }
        self.mutableArray = arrayOne;
        [self.mutableArray addObject:@"1"];
    }
    

    相关文章

      网友评论

          本文标题:数据的基本类型

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