如何@synthesize一个C风格的指针数组?

时间:2010-04-27 20:39:22

标签: c objective-c arrays pointers properties

我在类中定义了一个属性:

@interface myClass

UIImageView *drawImage[4];
...
@property (nonatomic, retain) UIImageView **drawImage;
...
@synthesize drawImage; // This fails to compile

我在StackOverflow和其他地方发现了类似的问题,但没有一个真正解决这个问题。什么是最客观的C Kosher方法呢?

3 个答案:

答案 0 :(得分:4)

你不能;你必须将retain改为assign并自己处理内存管理;因为您无法将-[retain]发送到UIImageView **(因为它不是对象。)

也就是说;您实际上无法使用@synthesize因为assign导致史诗内存泄漏,并且无法与retaincopy一起使用;你需要做的是实现-drawImage-setDrawImage:并写一些实际的访问者代码。

但不要这样做。使用NSArray

答案 1 :(得分:1)

最“犹太”的方式是创建NSArrayUIImageView个对象,而不是C风格的数组。

答案 2 :(得分:1)

您遇到的一个问题是函数无法返回C或Objective-C中的C风格数组,您可能遇到的另一个问题是您无法将指针类型分配给数组类型(这是您的综合二传手可能会尝试做什么)。至少有两种解决方案:

  1. 使用NSArray而不是C风格的数组。这是最干净的路线,特别是因为您只需要管理一个对象而不是四个对象的内存。
  2. 将C风格的数组包装成struct。您不能直接从函数返回C样式数组,但是您可以返回具有数组成员的struct(请注意,没有retain / release正在进行中。
    typedef struct {
        UIImage *image[4];
    } ImageCollection;
    ...
    @property (nonatomic, assign) ImageCollection drawImage;
    ...
    @synthesize drawImage;