gpt4 book ai didi

objective-c - 返回 C 数组和内存管理

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:19 25 4
gpt4 key购买 nike

我对 MapKit 中 MKMultiPoint 类的以下属性 points 感到有些困惑:

@property (nonatomic, readonly) MKMapPoint *points

它返回一个结构数组。可以通过 pointCount 属性知道数组中元素的数量。

由于我对 C 的了解有限,我一直认为如果通过引用传递给函数,C 数组只能“有点返回”,因为调用者负责分配内存然后释放它。

如果我要编写一个类似的属性,谁会为数组分配内存(大概是被调用者),更重要的是谁会释放它(大概是调用者)?这对我来说听起来有点冒险。此外,上述属性的文档没有说明必须释放内存。

我错过了什么?

最佳答案

(示例代码在 C 中)。

好的做法是在同一级别分配和释放资源。有两种方法可以定义返回数组的函数:

// `points` are allocated and freed by the caller.
void MakePoints (MKMapPoint *points, size_t number_of_points);

// usage:
size_t count = 10;
MKMapPoint *points = malloc (sizeof (MKMapPoint) * 10);
MakePoints (points, count);

// Use points

free (points);

// or simply
MKMapPoint points[10];
MakePoints (points, 10);

// Use points

第二种方式是让库函数管理内存:

MKMapPoint *MakePoints (size_t number_of_points);
void FreePoints (MKMapPoint *points);

// Usage:
MKMapPoint *points = MakePoints (10);

// Use points

// The library need not necessarily call free() on points,
// it might reuse it in further calls to MakePoints().
FreePoints (points);

关于objective-c - 返回 C 数组和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5387242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com