0

我编写了一个测试代码来理解 Objective C 与 C 指针。这是代码..

例如:

    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 is My str is name str is is str is BoB

即使我已经删除了索引为零的对象,所有 4 个对象都在新数组中正确显示,所以它不仅指向并且它有自己的对象,对吗?还是它是一个悬空指针?

谢谢

4

3 回答 3

6

当向 Cocoa 集合中插入对象时,对象一般不会被复制,只会被保留。(即,是的,只有指针用于引用对象。)

于 2013-08-20T06:07:30.333 回答
1

想象一下,如果你有两个知道你地址的邮递员,如果除掉其中一个,另一个仍然会知道你住在哪里。

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

于 2013-08-20T06:18:52.237 回答
0

H2CO3 是对的,obj-c 使用引用计数,这可以成为一种智能内存管理方式。数组和 sec_mut 都保留对真实对象的引用,而不是复制对象。您可以阅读有关引用计数技术的内容了解详细信息。

于 2013-08-20T06:26:41.603 回答