2012-08-08 41 views
1

我不知道如何声明一个只存储指向对象的指针的数组。按我的理解,如果我用的方法如何在目标中声明指针数组c

[ someArray addObject:someObject ] , 

然后,它将对象的副本添加到阵列和任何更改到对象不会得到反映到原来的对象。

我想要的是创建一个指针数组,它只会指向对象,并且对对象所做的更改将会持续存在。原谅我,如果我缺少一些基本的东西。

+0

然后它会将对象的副本添加到数组,并且对对象的任何更改都不会反映到原始对象。 - 不正确看到你应该接受的答案 – 2012-08-10 18:34:22

回答

6

一个NSArrayNSMutableArray一个指针数组。没有复制完成。

2

您的基本知识有误。从技术上讲,当你这样做时,你会创建指向这些对象的指针数组。

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html阅读说明。

如果你想获得复制的对象,你必须明确地这样说。

看这个问题,例如

Deep copying an NSArray

通过你应该使用一个NSMutableArray的方式。

也期待在超类的NSArray

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/cl/NSArray

专门为initWithArray:copyItems:

标志

如果是YES,在阵列中的每个对象接收到一个copyWithZone:消息到 创建对象对象的副本必须符合NSCopying 协议。在托管内存环境中,这不是该对象另外会收到的保留消息。对象副本是 然后添加到返回的数组。

如果不是,则在托管内存环境中,阵列中的每个对象在添加到返回的 数组时都会收到保留消息。

默认情况下,将对象添加到nsmutablearray会增加其容量(如果需要),为对象添加保留和指向对象的指针。

2

...如果我使用的方法

[ someArray addObject:someObject ] , 

然后将对象的副本添加到阵列和 对象的任何变化不会得到反映到原来的对象。

虽然它在技术上不涉及这个问题,但我只是必须纠正你的术语。 Objective-C中的“复制”意味着将方法-copy发送给该对象,该对象本身会创建一个新对象。数组所做的是将-retain发送到它们的对象,这意味着该数组本身现在拥有该对象中的一个桩,这就是为什么不引用数组(-objectAtIndex:)或对该对象本身有有效声明的更改不是反映。

我想要的是,创建一个指针数组,将指向 对象和对对象的更改将持续存在。原谅我,如果我 缺少一些基本的东西。

嗯,不幸的是,iOS不支持类NSPointerArray,这将使您的生活显着简单,就实际指针数组而言。没有进入任何C-craziness,我只能重申我上面提到的:如果你需要改变一个数组中的对象,只需使用有效的引用访问它,或使用-objectAtIndex。只要你仍然对该对象有一个有效的声明(在这种情况下是一个引用,它的指针没有改变,因为它被发送到-retain),你可以改变它。注意简单的例子如下:

NSMutableString *str = [[NSMutableString alloc]initWithString:@"Hello"]; 
NSArray *arr = [[NSArray alloc]initWithObjects:str, nil]; 
NSLog(@"%@",arr); 
[str appendString:@" Friend!"]; 
NSLog(@"%@",arr); 

此打印:

2012-08-07 21:37:46.368 .MyApp[2325:303] (
    Hello 
) 
2012-08-07 21:37:46.369 .MyApp[2325:303] (
    "Hello Friend!" 
) 

简单!

+0

为什么NSPointerArray对OP的要求有用? – 2012-08-08 03:42:50

+0

**关于实际的指针数组** – CodaFi 2012-08-08 03:43:29

+2

该数组是指针的实际数组。与你提到的类的区别是NSPointerArray是一个在NSArray之后建模的可变集合,但它也可以包含NULL值,可以插入或提取NULL值(以及对象计数)。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPointerArray_Class/Introduction/Introduction.html – Pochi 2012-08-08 03:46:17