Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 理解Objective-C与指针的测试_Iphone_Ios_Objective C - Fatal编程技术网

Iphone 理解Objective-C与指针的测试

Iphone 理解Objective-C与指针的测试,iphone,ios,objective-c,Iphone,Ios,Objective C,我编写了一个测试代码来理解目标C和C指针。这是密码 例如: 输出: str是我的 str是名字 str是 我是鲍勃 尽管我删除了索引为零的对象,但所有4个对象都在新数组中正确显示,所以它不仅指向并拥有自己的对象,对吗?还是一个悬空的指针 thanx将对象插入Cocoa集合时,对象通常不会被复制,只会被保留。(也就是说,是的,只有指针用于引用对象。)想象一下,如果你有两个知道你地址的邮差,如果去掉其中一个,另一个仍然知道你住在哪里 您实际上并没有删除对象,只是对对象的引用。H2CO3是正确的,ob

我编写了一个测试代码来理解目标C和C指针。这是密码

例如:

输出: str是我的 str是名字 str是 我是鲍勃

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


thanx

将对象插入Cocoa集合时,对象通常不会被复制,只会被保留。(也就是说,是的,只有指针用于引用对象。)

想象一下,如果你有两个知道你地址的邮差,如果去掉其中一个,另一个仍然知道你住在哪里


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

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

从数组中删除指针也不会释放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);
    }