iOS: 是否可以创建一个 NSObjects 矩阵?

iOS: is it possible to create a matrix of NSObjects?

由于 objective C 是 C 的超集,因此可以将 malloc/free 与原始类型一起使用来创建 NxM 元素的矩阵。我不喜欢它,因为它可能会导致错误和内存泄漏。这最后一点仍然正确吗? ARC 是否提供 C 类型的发布?

 int** matrix=(int**)malloc(N*sizeof(int*));
 for(int i=0; i<N; i++)
     matrix[i]=(int*)malloc(M*sizeof(int));

是否有其他 Objective-C 方式?我找到了 NSMatrix,但它适用于 mac,而不是 iOS。

Do ARC provide releasing of C types?

不,不是。 ARC 代表 Automated Reference Counting,这意味着它仅适用于引用计数对象。

由于 malloc/free 处理 "plain" 自由存储分配,您从 malloc 收到的内存块不符合 ARC 的条件。

然而,这并不意味着您无法通过 "piggybacking" 在 ARC 上实现管理 malloc 分配内存的某种程度的自动化:

  • 创建你自己的 class,它有一个指向你的矩阵的实例变量,并在指定的初始值设定项中分配矩阵。
  • 添加 dealloc 在分配的内存块上调用 free 的方法。

现在您有一个包含矩阵的引用计数 class。每当 ARC 指示您的 class 解除分配时,矩阵持有的内存也会被释放:

@interface Matrix : NSObject
@property (nonatomic, readonly) int** data;
-(instancetype)initiWithRows:(NSUInteger)rows andColumns:(NSUInteger)cols;
-(void)dealloc;
@end