zoukankan      html  css  js  c++  java
  • Objective-C语法之copy和mutablecopy

    #pragma mark 演示字符串的copy
    //用string和mutablestring做演示,array/mutableArray,dictionary/mutableDictionary以此类推
    //深拷贝--对象拷贝--内容拷贝(产生新对象)新对象计数器+1,原对象不变
    void stringmutableCopy(){
        //string = 1
        NSString *string = [[NSString alloc]initWithFormat:@"age is %i", 10];
        //str = 1
        //产生了一个新对象,原对象的计数器不变
        NSMutableString *str = [string mutableCopy];
        NSLog(@"str:%zi",[string retainCount]);
        NSLog(@"string:%zi",[str retainCount]);
        
        //修改副本,原对象不变
        [str appendString:@"abcd"];
        NSLog(@"string:%@",string);
        NSLog(@"str:%@",str);
        
        
        //string =0
        [string release];
        [str release];//copy也需要release
    }
    
    //不可变拷不可变--浅拷贝
    //浅拷贝--指针拷贝--地址拷贝 (拷贝指针,不会产生新的对象,返回原对象本身,原对象计数器+1)
    void stringcopy(){
        NSString *string = [[NSString alloc]initWithFormat:@"age is %i", 10];
        //为了性能着想,针对copy原则,string本来是不可变,[string copy]并没有产生一个新的对象,而是返回对象本身,copy相当与retain
        NSString *str = [string copy];//产生一个不可变对象
        //NSLog(@"%i", string == str);//结果为1,copy出来的对象为同一个
        NSLog(@"%zi",[string retainCount]);
        NSLog(@"%zi",[str retainCount]);
        
        [string release];
        [str release];//使用copy或者mutablecopy都需要release
    }
    
    
    #pragma mark 可变字符串的copy
    //深拷贝
    void mutableStringCopy(){
        
        NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i",10];
        
        NSString *str = [string copy];//产生一个不可变的str
        
        [str release];
    }
    
    //深拷贝
    void mutableStringmutableCopy(){
        NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i",10];
        //会产生一个新的对象
        NSMutableString *str = [string mutableCopy];
        [str appendString:@"1234"];
        NSLog(@"str:%@",str);
        NSLog(@"string%@",string);
        [str release];
        
    }
  • 相关阅读:
    <数据结构基础学习>(四)链表 Part 1
    <Android基础>(四) Fragment Part 1
    <Android基础>(三) UI开发 Part 3 RecyclerView
    <数据结构基础学习>(三)Part 2 队列
    <数据结构基础学习>(三)Part 1 栈
    <数据结构基础学习>(二)简单的时间复杂度分析
    <Android基础>(三) UI开发 Part 2 ListView
    <Android基础>(三) UI开发 Part 1
    <数据结构基础学习>(一)数组
    <Android基础>(二) Activity Part 2
  • 原文地址:https://www.cnblogs.com/kengsir/p/4204491.html
Copyright © 2011-2022 走看看