2013-08-20 41 views
0

我写了一个测试代码来理解Objective C vs C指针。这里是代码..测试了解Objective-C Vs指针

如:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
    NSMutableArray *sec_mut; 
    if (array) { 
     [array addObject:@"My"]; 
     [array addObject:@"name"]; 
     [array addObject:@"is"]; 
     [array addObject:@"BoB"]; 

      sec_mut = [[NSMutableArray alloc] init]; 

      if (sec_mut) { 
       for (id obj in array) { // Is it allocating new object and adding or only points to already existing memory (just adding address)? 
        [sec_mut addObject:obj]; 
       } 
      } 
    } 

    [array removeObjectAtIndex:0]; 

    for (id obj in sec_mut) { 
     NSLog(@"str is %@\n",obj); 
    } 

输出: str是我 str是名 str是被 STR是Bob

即使我在索引中删除对象零全部4个对象在新数组中正确显示,所以它不仅指向并且它有自己的对象,对吗?或者它是一个悬挂指针?

感谢名单

+0

从数组中删除指针不会释放C中的指向内存。 – Chuck

回答

6

当插入物体插入可可集合,对象通常不复制,仅保留。 (也就是说,只有指针用于引用对象)。

1

想象一下,如果你有两个知道你的地址的邮件员,如果摆脱其中的一个,另一个会知道你在哪里生活。

实际上并没有删除对象,只是对对象的引用。

0

H2CO3是正确的,obj-c使用引用计数,这可以是一个聪明的内存管理方式。数组和sec_mut保留自己对真实对象的引用,但不是复制的。你可以读一些关于引用计数技术细节。