8

我正在编写一个处理低级图像内存的 Objective-C 程序。我正在使用 ANSI-C 结构来存储我的数据——因为我存储的数据是 100% 的数据,没有任何方法可以对这些数据进行操作,所以完整的对象似乎有点矫枉过正。具体来说,我正在编写一个依赖于一组颜色的可定制的后处理算法——这就是事情变得棘手的地方。我将我的颜色存储为三个浮点数的结构和一个整数标志(具体与后处理算法相关)。一切都很顺利,除了一件事......

[实际问题]

我不知道如何添加指向 NSMutableArray 的指针!我知道如何添加对象,但添加指向结构的指针似乎更困难——我不希望 NSMutableArray 取消引用我的指针并将结构视为某种奇怪的对象。我希望 NSMutableArray 将指针自身添加到其集合中。我该怎么做呢?

提前致谢,

G

4

4 回答 4

16

有一个专门为此设计的类:NSPointerArray. 在此处查看 Apple 的文档。对于任意指针,您可能需要使用NSPointerFunctionsOpaqueMemoryandNSPointerFunctionsOpaquePersonality选项。

如果NSPointerArray不可用(例如,如果您正在为 iOS 开发),那么您可以使用 包装您的指针-[NSValue valueWithPointer:],只要包装和展开的开销不会太慢。

于 2012-04-13T05:14:47.393 回答
4

您可以将指针包装在NSValue对象中。

于 2012-04-13T05:16:48.973 回答
3

例子:

int aa=99;
int *a=&aa;
char bb='a';
NSMutableArray *MS=[NSMutableArray new];
[MS addObject:[NSValue valueWithPointer:a]];
[MS addObject:[NSValue valueWithPointer:&bb]];
int *c=[[MS objectAtIndex:0] pointerValue];
char *d=[[MS objectAtIndex:1] pointerValue];
于 2013-07-11T10:48:40.923 回答
1

如果 aNSMutableArray真的是你想要的,你可以使用这种方法:

NSMutableArray * NewNonRetainingArray() {
  CFAllocatorRef allocator = 0; /* << default */
  CFIndex capacity = 0; /* << no maximum */

  /*
    0 for the callbacks will result in elements which are not reference counted.
    you can write your own callbacks, if you like some extra diagnostics or
    special behavior. see the CFArrayCallBacks structure for a full description
    of all callbacks.
  */
  const CFArrayCallBacks* const callbacks = 0;
  return (NSMutableArray*)CFArrayCreateMutable(allocator, capacity, callbacks);
}

但是,你不会想把NSObjects 塞进去——它们不会被保留。

使用这种方法,您的 CF/NS-Array 的元素可能是指针或大小等于指针的任何原始值。

于 2012-04-13T05:18:32.813 回答