美文网首页
Copy关键字

Copy关键字

作者: 哔哩哔哩智能喵 | 来源:发表于2016-08-24 16:34 被阅读7次

    /*
    关于字符串为什么用copy
    因为如果字符串用strong 或者 retain会修改内部数据,会影响对象的属性
    如果用copy的话就会先copy一个出来,并不会对源对象进行修改
    */
    NSMutableString *string = [NSMutableString stringWithFormat:@"lxc"];
    Person p = [Person new];
    p.name = string;
    [string appendString:@"cool"];
    NSLog(@"%@",p.name);
    /

    block和copy的关系
    block默认存储在栈中,栈中的block访问到了外界的对象,不会对block进行retain
    block如果在堆中,如果在block中访问了外界的对象,会对外界的对象进行一次retain
    如果在使用copy保存block,这样可以保住block中使用的外界对象的命
    避免以后调用block的时候,外界的对象已经释放了
    */
    Dog *d = [Dog new];
    NSLog(@"%lu",[d retainCount]);//1
    p.pBlock = ^{
    NSLog(@"%@",d);
    };
    NSLog(@"%lu",[d retainCount]);//2
    //如果狗在调用之前block之前释放了,那么程序就会崩溃
    [d release];
    p.pBlock();
    [p release];

        //copy block之后引用循环引用
        //如果对现货中的block又用到了对象自己,那么为了避免内存泄漏,应该将对象修饰为__block
       __block Person  *p1 = [Person new];
        p.name = @"cyf";
        NSLog(@"%lu",[p1 retainCount]);
        p.pBlock = ^{
            NSLog(@"name = %@",p.name);
        };
        NSLog(@"%lu",[p1 retainCount]);
        p.pBlock();

    相关文章

      网友评论

          本文标题:Copy关键字

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