黑马程序员技术交流社区

标题: copy -- 复制对象的使用 [打印本页]

作者: MacxChina    时间: 2015-2-5 14:24
标题: copy -- 复制对象的使用
#import <Foundation/Foundation.h>

/*      
        1.复制对象的基本概念
    复制对象顾名思义,复制一个对象作为副本,它会开辟一块新的内存(堆内存)来存储副本对象,就像复制文件一样。即源对象和副本对象是两块不同的内存区域。
*/
int main(int argc, const char * argv[])
{
   
    @autoreleasepool {
        
        /*__________________________对数组进行retain_____________________________*/
        /*
         NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil];
         //retain只是引用计数+1,没有创建新的对象
         //array1与array2指针相同,指向同一个对象
         NSMutableArray *array2 = [array1 retain];
         
         if (array1 == array2) {
         NSLog(@"array1 == array2");
         NSLog(@"array1的引用计数:%ld",array1.retainCount);
         }
         */
        
        /*__________________________对数组进行copy_____________________________*/
        
        /*
         NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil];
         [array1 retain];  //引用计数:2
         
         //复制对象,创建一个新的副本对象
         NSArray *array2 = [array1 copy]; //array2计数为:1,因为是新创建出来的对象
         
         if (array1 != array2) {
         NSLog(@"array1 != array2,是两个对象");
         
         NSLog(@"array1的引用计数:%ld",array1.retainCount);
         NSLog(@"array2的引用计数:%ld",array2.retainCount);
         }
         
         [array2 release];
         [array1 release];
         */
        
        /*__________________________copy与mutableCopy的区别_____________________________*/
        
        /*
         copy与 mutableCopy都是复制对象,都能复制一个新的副本对象出来
         copy复制出来的对象,是不可变的对象
         mutableCopy复制出来的对象,是可变的对象
         */
        
        NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil];
        
        //copy复制出来的对象是不可变的
        NSArray *array2 = [array1 copy];
        
        //mutableCopy 复制出来的对象是可变
        NSMutableArray *array3 = [array1 mutableCopy];
        [array3 addObject:@"three"];
        
        NSLog(@"array3=%@",array3);
        
        
        //NSNumber *number = @123;
        //NSNumber没有实现NSMutableCopying协议
        //[number mutableCopy];  //错误
        
    }
    return 0;
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2