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

标签 ios objective-c c matrix memory-leaks

由于 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 代表自动引用计数,这意味着它仅适用于引用计数对象。

由于 malloc/free 处理“普通”自由存储分配,因此您从 malloc 接收的内存块不符合 ARC 的条件。

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

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

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

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

关于iOS:是否可以创建 NSObjects 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29473719/

相关文章:

c - 无法显示结果

c - GDK 中的椭圆对象

ios - 在uipickerview中显示选中的值

c - 将整数值存储在 C 中的字符数组中

objective-c - 如何为 UIAlertView 文本字段设置最大字符串长度

ios - 动画移回原始位置后未调用UIView动画

objective-c - 来自 GPUImageMovie 的视频开头有红框

objective-c - Objective-C : Send email with subject and body and switching app

ios - iOS 上新的 Facebook 登录重定向流程

ios - 隐式解包的可选类型 - 可能有错字?